jQuery工具方法globalEval()——全局解析JS
2017-11-20 21:10
519 查看
globalEval():实际就是全局的eval()函数,并且做了兼容处理。
首先理解eval()函数:
eval()函数执行一段JavaScript代码字符串,只有直接使用eval()本身,会在当前作用域中执行代码,否则相当于在全局作用域中执行代码。
例1.直接使用eval()本身,相当于在当前作用域执行代码:
var foo = 1;
function test() {
var foo = 2;
eval('foo = 3');
return foo;
}
console.log(test()); // 3
console.log(foo); // 1例2.通过window.eval(),代码将在全局作用域执行:
"use strict";
var foo = 1;
function test() {
var foo = 2;
eval('var foo = 3');
return foo;
}
console.log(test()); // 2
console.log(foo); // 1
"use strict";
var indirect = eval;
indirect('var foo = 3');
console.log(foo);//3
"use strict";
function test(){
var indirect = eval;
indirect('var foo = 3')
}
test();
console.log(typeof foo); //number
在严格模式下,通过window调用,没有eval作用域
"use strict";
var indirect = eval;
window.eval('var foo = 3');
console.log(foo);//3
总结:严格模式只对直接使用eval()有效,对间接使用的eval()无效。
jQuery中的工具方法globalEval(),无论在什么条件下,都在全局作用域中执行代码。
间接使用
jquery-2.0.3.js:551
3
创建script标签
jquery-2.0.3.js:543
3
总结:严格模式只对直接使用eval()有效,对间接使用的eval()无效。
首先理解eval()函数:
eval()函数执行一段JavaScript代码字符串,只有直接使用eval()本身,会在当前作用域中执行代码,否则相当于在全局作用域中执行代码。
例1.直接使用eval()本身,相当于在当前作用域执行代码:
var foo = 1;
function test() {
var foo = 2;
eval('foo = 3');
return foo;
}
console.log(test()); // 3
console.log(foo); // 1例2.通过window.eval(),代码将在全局作用域执行:
var foo = 1; function test() { var foo = 2; window.eval('foo = 3'); return foo; } console.log(test()); // 2 console.log(foo); // 3例3.将eval赋值给其他变量,间接使用,代码将在全局作用域执行
var foo = 1; function test() { var foo = 2; var indirect = eval; indirect('foo = 3'); return foo; } console.log(test()); // 2 console.log(foo); // 3eval()函数在严格模式下:eval中的代码不能创建eval所在作用域下的变量、函数。而是为eval单独创建一个作用域,即严格模式创设了第三种作用域:eval作用域,并在eval返回时丢弃。
"use strict";
var foo = 1;
function test() {
var foo = 2;
eval('var foo = 3');
return foo;
}
console.log(test()); // 2
console.log(foo); // 1
"use strict"; eval('var foo = 3'); console.log(typeof foo); //undefined严格模式下,间接使用:没有eval作用域,仍是全局作用域执行。
"use strict";
var indirect = eval;
indirect('var foo = 3');
console.log(foo);//3
"use strict";
function test(){
var indirect = eval;
indirect('var foo = 3')
}
test();
console.log(typeof foo); //number
在严格模式下,通过window调用,没有eval作用域
"use strict";
var indirect = eval;
window.eval('var foo = 3');
console.log(foo);//3
总结:严格模式只对直接使用eval()有效,对间接使用的eval()无效。
jQuery中的工具方法globalEval(),无论在什么条件下,都在全局作用域中执行代码。
globalEval: function( code ) { var script, 4000 indirect = eval; code = jQuery.trim( code ); if ( code ) { // If the code includes a valid, prologue position // strict mode pragma, execute code by injecting a // script tag into the document. if ( code.indexOf("use strict") === 1 ) { script = document.createElement("script"); script.text = code; document.head.appendChild( script ).parentNode.removeChild( script ); } else { // Otherwise, avoid the DOM node creation, insertion // and removal by using an indirect global eval indirect( code ); } } },
"use strict"; $.globalEval('var foo = 3') console.log(foo); //3修改
globalEval: function( code ) { var script, indirect = eval; code = jQuery.trim( code ); if ( code ) { // If the code includes a valid, prologue position // strict mode pragma, execute code by injecting a // script tag into the document. if ( code.indexOf("use strict") === 1 ) { console.log("创建script标签"); script = document.createElement("script"); script.text = code; document.head.appendChild( script ).parentNode.removeChild( script ); } else { // Otherwise, avoid the DOM node creation, insertion // and removal by using an indirect global eval indirect( code ); console.log("间接使用"); } } }
"use strict"; $.globalEval('var foo = 3') console.log(foo); //3在console对话框中显示的内容:
间接使用
jquery-2.0.3.js:551
3
$.globalEval('"use strict";var foo = 3') console.log(foo); //3在console对话框中显示的内容:
创建script标签
jquery-2.0.3.js:543
3
eval('"use strict";var foo = 3') console.log(typeof foo); //undefined
总结:严格模式只对直接使用eval()有效,对间接使用的eval()无效。
相关文章推荐
- Jquery+asp.net后台数据传到前台js进行解析的方法
- js/jquery解析json和数组格式的方法介绍
- js/jquery解析json和数组格式的方法详解
- js/jquery解析json和数组格式的方法介绍
- jquery分页插件jquery.pagination.js使用方法解析
- jquery源码解析:jQuery工具方法Callbacks详解
- js/jquery解析json和数组格式的方法详解
- JQuery源码解析-JQuery的工具方法(2)
- JS的全局函数eval解析JSON字符串
- jQuery解析XML文件同时动态增加js文件的方法
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- jQuery 1.6 源码学习(七)——core.js[7]之实用工具方法(Utilities)
- JQuery源码解析-JQuery的工具方法(3)
- js和jquery解析json字符串为js对象的3种方法
- jquery源码解析:jQuery工具方法when详解
- JQuery源码解析-JQuery的工具方法(4)
- js/jquery解析json和数组格式的方法详解
- JQuery源码解析-JQuery的工具方法
- Jquery+asp.net后台数据传到前台js进行解析的方法
- js解析字符串为json对象使用eval(str)方法