一小段js代码的困惑,有关变量提升的问题
<script>
f = function () {
return true;
};
g = function () {
return true;
};
(function () {
if (g() && []==![]){ //12行
f=function f(){return false;};
function g(){return true;}
}
})();//16行
alert(g());
alert(f());
</script>
执行结果如下
function g(){return true;}
这句理论上属于函数声明,应该会变量提升才对,12行为什么会产生g()
不是函数的错误呢?
另外:最后的alert(g());
这句话和闭包中定义的function g(){return true;}
有没有关系啊?
最后,闭包中f=function f(){return false;};
这个f和外边的f有关系吗?
希望各位不吝赐教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
看眼这个吧。
不同浏览器貌似还不一样 ...
以下拷贝自上面的网站:
不管条件是否成立都要进行变量提升,但是新版本浏览器只对函数进行声明
你把这段代码贴到IE8中执行再看看
看起来就很复杂的样子