锁定老帖子 主题:关于js解析执行有趣的事
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-06-21
在函数执行的过程中,每遇到一个变量,都会经历一次标识符解析过程,决定从哪里获取或存储数据。这个过程需要搜索运行期上下文的作用域链,查找同名的标识符。搜索从头部开始,如果找到就用这个标识符对应的变量;如果没有找到,继续搜索作用域链中下一个对象,直到找到为止。
function b() { a = 10; return; function a() {} } 函数b的运行期上下文中已经存在了一个变量a,即function a(){},因此当搜索a的时候其实是搜索到了函数a,这样外面的a就被忽略了. |
|
返回顶楼 | |
发表时间:2012-06-21
最后修改:2012-06-21
解释的真麻烦 给你们看下标准的写法 真正的代码是这样执行的 所以不要乱写一些非标准的代码 很容易迷惑人的
var foo = 1; function bar() { var foo; if (!foo) { foo = 10; } alert(foo); } bar(); var a = 1; function b() { var a; a = 10; return; a = function(){}; } b(); alert(a); |
|
返回顶楼 | |
发表时间:2012-06-21
弱弱的问一下,这个是javascript的闭包吗?
|
|
返回顶楼 | |
发表时间:2012-06-21
kxscr 写道
解释的真麻烦 给你们看下标准的写法 真正的代码是这样执行的 所以不要乱写一些非标准的代码 很容易迷惑人的
var foo = 1; function bar() { var foo; if (!foo) { foo = 10; } alert(foo); } bar(); var a = 1; function b() { var a; a = 10; return; a = function(){}; } b(); alert(a); 写这些代码目的不是迷惑人,是让人更好理解JS的执行原理,当然啦,实际项目中也不会出现这样的代码吧 |
|
返回顶楼 | |
发表时间:2012-06-21
蒹葭从风 写道 弱弱的问一下,这个是javascript的闭包吗?
这个不是闭包 |
|
返回顶楼 | |