扫码关注官方订阅号
var str = "abcdefgabcdefg" for(var i = 0;i全部都是undefinded
认证高级PHP讲师
有个答案有错误,这里的IIFE并不会隔断作用域链,相反会延长作用域链,IIFE也同时拥有对上级作用域的访问权限。 至于为什么undefined,是因为var str = str;语句中。str变量在javascript引擎解析被提升(hosting)到当前作用域的顶端
(function(i){ var str = str; })
等同
(function(i){ var str; str = str; })
这里有篇详细的文章。javascript变量提升
就像其中答案所说的 你的代码等同于 var str = "abcdefgabcdefg" for(var i = 0;i<str.length;i++){ (function(i){ var str; str = str; console.log(str); })(i) }
你的代码相当于
javascriptvar str = "abcdefgabcdefg" for(var i = 0;i<str.length;i++){ (function(i){ var str; str = str; console.log(str); })(i) }
javascript
var str = "abcdefgabcdefg" for(var i = 0;i<str.length;i++){ (function(i){ var str; str = str; console.log(str); })(i) }
所以这种情况下不要和外部变量同名
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
有个答案有错误,这里的IIFE并不会隔断作用域链,相反会延长作用域链,IIFE也同时拥有对上级作用域的访问权限。
至于为什么undefined,是因为var str = str;语句中。str变量在javascript引擎解析被提升(hosting)到当前作用域的顶端
等同
这里有篇详细的文章。
javascript变量提升
你的代码相当于
所以这种情况下不要和外部变量同名