(function(){
var foo;
console.log(typeof foo); //function
function foo(){}
foo = "foo";
console.log(typeof foo); //string
})();
不懂第二个为什么打印 string 啊?
foo已经是函数了,函数能直接赋值成字符串?
(function(){
var foo;
console.log(typeof foo); //function
function foo(){}
foo = "foo";
console.log(typeof foo); //string
})();
不懂第二个为什么打印 string 啊?
foo已经是函数了,函数能直接赋值成字符串?
提升以后变成这样子:
(function(){
var foo;
function foo(){}
console.log(typeof foo); //function
foo = "foo";
console.log(typeof foo); //string
})();
所以,当第二个typeof foo
的时候,foo
已经是一个string
了
感觉你应该这样问:
(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 = 1
后typeof foo
就是number
了。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答872 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
javascript 是弱类型的语言,变量没有类型声明,都是按照赋值时值的类型来确定类型的。