javascript - js变量提升问题
迷茫
迷茫 2017-04-11 11:45:29
[JavaScript讨论组]
(function(){
    var foo;
    console.log(typeof foo); //function
     
    function foo(){}
 
    foo = "foo";
    console.log(typeof foo); //string
})();

不懂第二个为什么打印 string 啊?
foo已经是函数了,函数能直接赋值成字符串?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
怪我咯
var foo;
console.log(foo); //function foo()
     
function foo(){}
 
foo = "foo";
console.log(foo); //foo

javascript 是弱类型的语言,变量没有类型声明,都是按照赋值时值的类型来确定类型的。

巴扎黑

提升以后变成这样子:

(function(){
    var foo;
    function foo(){}
    
    console.log(typeof foo); //function
      
    foo = "foo";
    console.log(typeof foo); //string
})();

所以,当第二个typeof foo的时候,foo已经是一个string

ringa_lee

感觉你应该这样问:

(function(){
    console.log(typeof foo); //function
    function foo(){}
    foo = "foo";
    console.log(typeof foo); //string
})();

相当于:

(function(){
    var foo = function(){};
    console.log(typeof foo); //function
    foo = "foo";
    console.log(typeof foo); //string
})();

JS是弱类型语言,类型是可以变的。给foo赋值字符串"foo"后,foo变量就是字符串类型了。同理,给foo = 1typeof foo就是number了。

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

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