`
chang_ytao
  • 浏览: 26369 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

Javascript全局eval

阅读更多

     在最近的项目中用到了第三方的GIS产品,感觉巨垃圾。为了克服性能的问题,决定对JS使用并行下载,顺序执行的策略。首先是借鉴了一本书上的代码,代码是并行下载,也通过eval执行了,但是在window下就是看不到预期的function。在IE8和FireFox下通过都不行。晚上在家了翻阅资料,有人说window.eval和eval在不同的浏览器甚至同一浏览器不同版本下都不一样,在家中IE9下运行终于看到了预期的效果,第二天一大早到公司运行,结果又失败了(IE8)。后来在一国外的网站上终于找到了一段代码,这才算真正解决了自己的问题(做前端开发苦啊!!!呵呵)。废话说了不少了,直接上代码了:

   全局执行的代码

globalEval : function globalEval(src) {

    if (window.execScript) {

        window.execScript(src);

        return;

    }

    var fn = function() {

        window.eval.call(window,src);

    };

    fn();

}

  并行下载,顺序执行的代码:

//保证异步按顺序加载JS的代码,此代码后续需要进一步考虑和扩展

sdec.script= {

queuedScripts: new Array(),

loadScriptXHRInject:function(url, onload, bOrder){

var queueLen = sdec.script.queuedScripts.length;

if(bOrder){

var qScript = {response:null, onload:onload,done:false};

sdec.script.queuedScripts[queueLen] = qScript;

}

dojo.xhrGet({

url:url,

load:function(response){

if(bOrder){

sdec.script.queuedScripts[queueLen].response =response;

sdec.script.injectScripts();

}else{

//SuperMap相关的JS文件异步加载完毕,执行JS

sdec.script.globalEval(response);

if(onload){

onload();

}

}

},

error:function(){

console.debug(error.response);

}

});

 

},

 

injectScripts:function(){

var len = sdec.script.queuedScripts.length;

for(var i=0;i<len;i++){

var qScript = sdec.script.queuedScripts[i];

if(!qScript.done){

if(!qScript.response){

//停止!需要等待依赖的响应

break;

}else{

sdec.script.globalEval(qScript.response);

if(qScript.onload){

qScript.onload();

}

qScript.done = true;

}

}

}

},

globalEval : function globalEval(src) {

    if (window.execScript) {

        window.execScript(src);

        return;

    }

    var fn = function() {

        window.eval.call(window,src);

    };

    fn();

}

};[/size][/size]


 

分享到:
评论

相关推荐

    javascript使用eval或者new Function进行语法检查

    虽然new Function( ) 在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数。 在eval&#40; &#41; 接受的参数前面...

    深入认识javascript中的eval函数

    1)介绍javascript中的eval函数的用法 (2)如何在函数内执行全局代码 ►先来说eval的用法,内容比较简单,熟悉的可以跳过。 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行...

    JavaScript必知必会(五) eval 的使用

     eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行, 改变全局变量的值: var x = ; //定义的全局变量 alert&#40;x&#41;;// var g = eval&#40;"x="&#41;; //eval 会根据当前上下文...

    JavaScript中的全局对象介绍

    对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用。这个JavaScript自身提供的全局对象的功能包括: 1.全局对象拥有一些常用的属性值。比如undefined、Infinity以及...

    JavaScript中的eval&#40;&#41;函数使用介绍

    是JavaScript全局对象的一个函数。比如,上述代码等价于: 代码如下: console.log(this.eval&#40;“42 * 2”&#41;);//84 不过在使用eval&#40;&#41;语句时,一般都采用上述第一种做法,也即忽略全局对象直接使用...

    javascript eval函数深入认识

    (1)介绍javascript中的eval函数的用法 (2)如何在函数内执行全局代码 ►先来说eval的用法,内容比较简单,熟悉的可以跳过。 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行...

    js eval函数使用,js对象和字符串互转实例

    函数 JavaScript 全局函数 定义和用法 eval&#40;&#41; 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。 如果参数是一个表达式,eval&#40;&#41; 函数将执行表达式。如果参数是Javascript语句,eval&#40;&#...

    JavaScript中的eval&#40;&#41;函数详解

    和其他很多解释性语言一样,JavaScript同样可以解释运行由JavaScript源代码组成的字符串,并产生一个值。JavaScript通过全局函数eval&#40;&#41;来完成这个工作

    JavaScript学习小结之被嫌弃的eval函数和with语句实例详解

    是一个全局函数,javascript通过eval&#40;&#41;来解释运行由javascript源代码组成的字符串 var result = eval&#40;'3+2'&#41;; console.log(result,typeof result);//5 'number' 用法  eval&#40;&#41;只有一个...

    编写可维护的JavaScript(中文)

    4.6.1 eval() 4.6.2 原始包装类型 第二部分 编程实践 第5章 UI层的松耦合 5.1 什么是松耦合 5.2 将JavaScript从CSS中抽离 5.3 将CSS从JavaScript中抽离 5.4 将JavaScript从HTML中抽离 5.5 将HTML从...

    编写可维护的javascript(英文)

    4.6.1 eval() 4.6.2 原始包装类型 第二部分 编程实践 第5章 UI层的松耦合 5.1 什么是松耦合 5.2 将JavaScript从CSS中抽离 5.3 将CSS从JavaScript中抽离 5.4 将JavaScript从HTML中抽离 5.5 将HTML从...

    JS中的eval 为什么加括号

    —eval在ECMA定义中是全局对象原型的方法; —eval接受的参数是字符串格式的js代码, 将由执行引擎(记得’高级程序设计’还是哪说过, 此时新建一个执行引擎)执行这段字符串, 然后返回结果到eval调用的位置. &lt;!...

    【JavaScript源代码】详解JavaScript中的执行上下文及调用堆栈.docx

    详解JavaScript中的执行上下文及调用堆栈  目录 一、执行上下文是什么二、执行上下文栈是什么三、执行上下文栈的过程细节(一)创建阶段(二)执行阶段 一、执行上下文是什么 二、执行上下文栈是什么 三、执行...

    理解Javascript的动态语言特性

    动态执行:javascript提供eval&#40;&#41;函数,用于动态解释一段文本,并在当前上下文环境中执行。 首先我们需要理解的是eval&#40;&#41;方法它有全局闭包和当前函数的闭包,比如如下代码,大家认为会输出什么呢? ...

    JavaScript 5th

    Eval 成为保留词,同时,不可以再使用 Eval 声明变量,如 eval("var i=3"); print(i); 之类的语句会报错 8进制数字表示被禁止, 010 代表 10 而不是 8 参数中不再允许使用 delete with 语句曾是万错之源,现被...

    jailedEval:提供安全“评估”javascript代码而无需访问全局上下文的能力的简单函数

    它允许您安全地运行/评估 javascript 代码,而无需访问全局上下文(窗口、文档等)。 但是 eval 不是很糟糕吗? 是的,eval 不好。 但这主要是因为您不应该允许不受信任的代码访问您的任何页面或用户的数据(例如...

    JavaScript中解析JSON数据的三种方法

    概述 现在JSON格式在web开发中越来越受重视,...解析JSON数据的最常用方法是使用javascript的eval&#40;&#41;方法,代码如下: 代码如下: function toJson(str){  var json = eval&#40;‘(‘ + str + ‘&#41;’);  

    探寻Javascript执行效率问题

     Javascript中的作用域链、闭包、原型继承、eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下。  1、全局导入  我们在编码过程中多多少少会使用到一些全局变量(window,...

    Javascript执行效率全面总结

    1、全局导入我们在编码过程中多多少少会使用到一些全局变量(window,document,自定义全局变量等等),了解javascript作用域链的人都知道,在局部作用域中访问全局变量需要一层一层遍历整个作用域链

    Javascript执行上下文顺序的深入讲解

    全局执行上下文:只有一个,这是默认的,也是基础的执行上下文.(不在任何函数中的代码都是全局执行上下文)他有两个作用,一个是创建了全局变量,也就是指向window下的变量,另一个是将this的指向全局. 函数执行上下文:有...

Global site tag (gtag.js) - Google Analytics