javascript - js中变量提升问题
阿神
阿神 2017-04-10 17:36:15
[JavaScript讨论组]

求问一道js的题

var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

运行结果为什么是“Goodbye Jack”,即name是undefined

var name = 'World!';
(function () {
    console.log(name)
})();

却输出了name的值“World!”

明白了没注意if中的var name会进行变量声明提升,多谢大家了

阿神
阿神

闭关修行中......

全部回复(4)
PHPz

变量声明提升的作用
在一个函数体内声明的变量,JS解析器都会将其移动到函数体的顶部

var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

等价为==>

var name = 'World!';
(function () {
    var name;    
    if (typeof name === 'undefined') {
        name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

执行的时候有个变量查找的过程,如果在当前函数体内没找到,就会到定义的函数体的外层函数中去寻找,一直向上到全局对象中寻找,还是找不到就会报TypeError错误

var name = 'World!';
(function () {
    console.log(name)
})();

以上代码就表现为这种行为~~

怪我咯

你的提问已经解答了啊,以下代码等价于你提问的代码

var name = 'World!';
(function () {
    var name;//undefined
    if (typeof name === 'undefined') {
        name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
伊谢尔伦

第一个等价于
`

var name // 此时name就是undefined 所以条件成立 进入if 赋值为  Jack ,这才是变量提升

// 第二个js 运行后在当前作用域下找不到 name 向上级作用域查找  找到了  所以是  world
 if (typeof name === 'undefined') {
   name = 'Jack';
    console.log('Goodbye ' + name);
} else {
    console.log('Hello ' + name);
}

`

大家讲道理

为什么第二个不提升。第一个提升?
因为js是函数级作用域。
函数块内的所有变量都会把声明提到函数块内部的顶端。
var v=3
会提升var v
所以alert v 会undefined

而函数块内没有新变量声明。alert找不到v,就会往上翻。翻到函数块外面
然后发现v的值。输出hello

看懂了赞我

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号