举个例子,假如简单的代码是这样的:
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是一个函数了。
不太明白是什么造成了这两者之间的区别。另外我手边有一本高程三,请问在这本书里面我应该看哪一块的内容,来更好地理解。
巴扎黑2017-04-11 11:25:08
foo=bar() bar函数已经执行了 foo等于他返回的值 1
var num = 1;是在当前域中声明变量.
如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。
而 num = 1 事实上是对属性赋值操作。
首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用)中解析 num;
如果在任何当前作用域链中找到num,则会执行对num属性赋值;
如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。
注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。
PHP中文网2017-04-11 11:25:08
(function(){
n = 1;
console.log(n);
})()
console.log(n);
console.log(window.n);
应为挂在window 下的属性.
function bar(){
return 1;
}
foo=bar(); //foo=1;
console.log(typeof foo); //'number'
这里foo为bar执行之后的返回值. 1
, typeof 1// number
foo = function(){...}
这里foo声明一个function 名为foo...
所以题主思考一下下面的foo 值为什么?
foo = (function(){
return 1;
})();
怪我咯2017-04-11 11:25:08
foo=bar(); //foo=1; 这样是把bar()函数的返回值赋给foo.
foo=function bar(){
return 1;
}
//这样是讲函数bar指针赋给foo
PHP中文网2017-04-11 11:25:08
你写的两种代码不是相同的
第一个是执行bar(function),然后把结果(number)赋值给foo
第二个是直接把方法(function)赋值给foo
如果要和第一个一样,应该这么写:
foo=(function bar(){
return 1;
})();
console.log(typeof foo); //'number'
黄舟2017-04-11 11:25:08
你的第一个例子foo=bar();既然bar已经被执行了,那么foo等于bar()执行后的结果,就是一个number了,
第二个例子
foo=function bar(){
return 1;
}
bar是一个函数,foo等于的是一个函数,又不是执行之后的结果,肯定是一个function了
高洛峰2017-04-11 11:25:08
第一段代码是执行了bar(),得到了结果赋值给了foo,所以这个时候foo的类型是number;
第二段代码是把整个函数赋值给了foo,这个函数是放置在内存中的堆区域,是一个指针,指针间的赋值,赋值的是地址。所以,foo的类型是function。
阿神2017-04-11 11:25:08
在非严格模式下,对一个未声明的,unqualified 标识符赋值,会自动创建全局对象(如 window)下的属性。
var a
a = 1
delete a // false
a = 1
delete a // true