zoukankan      html  css  js  c++  java
  • js 如何保存代码段并执行以及动态加载script

    1.模块化开发

      通常使用的是 export和import 实现代码的共享和导入

    2.特殊情况下需要将代码段作为参数传递

    可以使用function 的toString方法将整合函数和里面的代码批量转化为字符串

    然后可以借助eval方法执行,eval接收一个字符串参数,并作为可执行的js代码段进行执行

    如下

    /* 将代码段转化为字符串 */
    var fun = function a__b__a__b(){ let a =3 *9; var dom = document console.log('dom', dom) console.log('a', a) }.toString()
    /* 通过正则去除包裹函数,执行代码段 */ eval(fun.replace(
    /^function a__b__a__b(){|}$/g,''))

    当然eval有一定安全风险

    3.动态插入 script

    分为插入文件和插入可执行代码

    插入文件

    /*
    * @param{String} url script 路径
    * @param{Function} cb script标签加载完后的回调函数
    */
    
    var createScript = function(url,cb){
      if(!url) return;
      let scriptDom = document.createElement('script');
      scriptDom.type = 'text/javascript';
      scriptDom.async = true
      scriptDom.src = url;
    // 判断IE
    if(!+[-1]){ scriptDom.onreadystatechange = function(){ if(this.readyState == 'loaded' || this.readyState == 'complete'){ cb() } } }else{
    scriptDom.onload = function(){
    cb()
    }
    }
    document.body.appendChild(scritDom) }

    插入可执行代码

    /*@param{String} code 待执行的代码串*/
    var creatScript = function(code){
    if(!code) return
    let scriptDom = document.createElement('script');
    scriptDom.type = 'text/javascript';
    try{
    let codeDom = document.createTextNode(code)
    script.appendChild()
    }catch(e){
    console.log('isIe')
    script.text = code
    }
    document.body.appendChild(scriptDom)
    }

  • 相关阅读:
    Redis配置文件的使用
    WEB请求处理一:浏览器请求发起处理
    Nginx配置文件(nginx.conf)配置详解
    【node】------mongoose的基本使用
    Promise.resolve()与new Promise(r => r(v))
    promise是什么?
    apiDoc
    apiDoc 使用指南
    微信小程序-性能与体验优化
    微信小程序-调取上一页的方法
  • 原文地址:https://www.cnblogs.com/lizhiwei8/p/12841365.html
Copyright © 2011-2022 走看看