jQuery 源码之globalEval
2016-05-25 17:31
465 查看
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 ) { 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 ); } } },
这个函数的功能是将变量转为全局变量,代码很简单
globalEval()的功能我们可以理解为:
function test() { // var ceval = eval; eval('var a = 123'); alet(a); } test(); //123
但是如果代码稍微修改下,我们会有如下发现:
function test() { eval('var a = 123'); // alet(a); } test(); alert(a); // Uncaught ReferenceError: a is not defined
这是为什么呢。但是唯一需要注意的小点是,
eval()既是关键字,又是window的属性。所以在
test()函数直接使用
eval()时,浏览器将它解析成了一个关键字,存储在函数内的临时作用域内,是个临时变量,所以会报错 。为了避免eval被当做关键字,可以将它初始化赋给一个变量,这个变量指向的是全局对象window,是window下的属性,这样就能正常工作了。代码如下
function test() { var geval = eval; geval('var a = 123'); } test(); alert(test('a'));//123
相关文章推荐
- jquery中提及的whitespace characters
- 26 个 jQuery使用技巧
- 动画库 Tweenmax 使用示例2 - 事件和状态
- jquery无刷新添加和删除input输入框 增加减少input框
- eclipse工程加入jquery.min.js报错:missing semicolon
- WebStorm配置JQuery提示
- 轮播图 jquery
- 动画库 Tweenmax 使用示例1 - 执行动画
- 学习jquery的 datatable
- 使用jquery获取url以及jquery获取url参数的实现方法
- jquery分隔Url的param方法(推荐)
- 使用jquery提交form表单并自定义action的方法
- 最常见的 20 个 jQuery 面试问题及答案
- jQuery使用注意事项(永久更新)
- jquery设置属性
- 浅析jQuery 遍历函数,javascript中的each遍历
- JQuery开发2-网页内容淡入淡出
- jquery 遍历数组 each 方法详解
- jquery插件
- PHP+Mysql+jQuery实现文件下载次数统计