举个例子,假如简单的代码是这样的:
function bar(){
return 1;
}
foo=bar(); //foo=1;
console.log(typeof foo); //'number'
在这里foo并不是一个函数,而是一个数字。但是,如果写成下面的这种格式:
foo=function bar(){
return 1;
}
console.log(typeof foo); //'function'
这个时候,foo是一个函数了。
不太明白是什么造成了这两者之间的区别。另外我手边有一本高程三,请问在这本书里面我应该看哪一块的内容,来更好地理解。
foo=bar() bar函数已经执行了 foo等于他返回的值 1
应为挂在window 下的属性.
这里foo为bar执行之后的返回值.
1
, typeof 1// number这里foo声明一个function 名为foo...
所以题主思考一下下面的foo 值为什么?
one
foo=bar(); //foo=1; 这样是把bar()函数的返回值赋给foo.
two
你写的两种代码不是相同的
第一个是执行bar(function),然后把结果(number)赋值给foo
第二个是直接把方法(function)赋值给foo
如果要和第一个一样,应该这么写:
你的第一个例子foo=bar();既然bar已经被执行了,那么foo等于bar()执行后的结果,就是一个number了,
第二个例子
bar是一个函数,foo等于的是一个函数,又不是执行之后的结果,肯定是一个function了
第一段代码是执行了bar(),得到了结果赋值给了foo,所以这个时候foo的类型是number;
第二段代码是把整个函数赋值给了foo,这个函数是放置在内存中的堆区域,是一个指针,指针间的赋值,赋值的是地址。所以,foo的类型是function。
在非严格模式下,对一个未声明的,unqualified 标识符赋值,会自动创建全局对象(如 window)下的属性。