全局eval的实现
来源:互联网 发布:淘宝水弹枪合法吗 编辑:程序博客网 时间:2024/05/20 11:23
我们在函数里调用eval的时候,所创建变量的作用域是在当前的作用域下的,比如下面的代码:
<!DOCTYPE HTML>
<html >
<head>
<meta charset="utf-8">
</head>
<script>
(function(){
eval("var a=1")
})()
console.log(a)
</script>
</html>
上面的代码所创建的变量是属于函数作用域的,在函数外面我们使用不了,所以下面说一下几种实现全局eval的方法
1,使用execScript,这个函数在低版本的ie下支持,高版本的已经不支持了,所以涉及兼容性的时候加上他,使用这个函数的时候,加不加window引用都一样,这个和eval(见第三条)不同,这个函数意思应该就是把脚步作为script标签里的脚步执行,所以加不加window都可以。
(function(){
execScript("var a=1")//低版本ie才可以成功执行
})()
console.log(a)
2,使用动态创建的script标签,在全局中执行脚步。(具体实现就是创建一个script标签,然后把需要执行的字符串当做script标签里的脚步就行,然后把新建的script标签增加到head中,执行完后删除就行)
3,使用eval,直接使用eval的时候,浏览器会把当前的作用域作为创建环境,但是我们使用window.eval或者eval.call(window,"str")的时候就可以在全局创建变量了(jquery实现中的代码是window.eval.call(window,"str"),第二个window好像是没有必要的,不知道作者是什么用意)。
(function(){
window.eval("var a=1")//低版本ie才可以成功执行
})()
console.log(a)
4,还有一个不太好的办法就是创建变量的时候不要加var,这样创建的变量是属于全局的,但是对于动态创建函数,我们就没办法了。
(function(){
eval("a=1")//低版本ie才可以成功执行
})()
console.log(a)
- 全局eval的实现
- eval全局和局部的问题
- JavaScript全局函数eval的用法
- 让eval()全局作用域执行的方法深入研究
- 全局的Context实现
- 实现全局的Context
- 实现全局的Context
- js eval() 全局作用域
- 实现JavaScript中eval()函数的功能
- 让eval()全局作用域执行的方法深入研究(javascript)
- VC全局热键的实现
- 全局HOOK的实现学习!
- android 全局dialog的实现
- Qt 全局热键的实现
- as3 eval实现
- c++实现简单eval
- Java版的实现JavaScript中的eval()函数
- 实现一个简单的 eval 函数计算加减法和括号
- 303. Range Sum Query - Immutable
- notepad++正则匹配及匹配内容的保留与处理
- python sorted
- LeetCode 73. Set Matrix Zeroes(矩阵清零)
- Notepad++正则表达式中几点需要注意的地方
- 全局eval的实现
- mathematica试除法解素数问题
- windows程序设计POPPAD3的关键难点详解(四)
- leetcode #21 in cpp
- LeetCode 74. Search a 2D Matrix(搜索矩阵)
- LeetCode 75. Sort Colors(颜色排序)
- LeetCode 76. Minimum Window Substring(最小窗口子串)
- 关于Gson.jar导入正常使用,代码无错,但程序执行解析时崩溃的一些问题
- leetcode #22 in cpp