(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
了。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
javascript 是弱类型的语言,变量没有类型声明,都是按照赋值时值的类型来确定类型的。