var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
返回值为"1undefined"
它们应该是在同一作用域,为什么type语句调用不到f函数?
巴扎黑2017-04-10 14:57:10
这和if没有关系
js
var x = function f(){}; console.log(typeof x, typeof f); //function undefined
这是函数表达式和函数声明语句的区别,前者带名字只会影响x.name
而不会声明对应的变量,后者不仅会声明,还有提升的效果,比如
js
console.log(typeof g); function g(){}; //function
PHP中文网2017-04-10 14:57:10
很簡單了
js
var x = 1; if (function f(){}) { x += typeof f; } x;
首先我們分析下, if裡面是true
還是false
. !!function f(){} -> true
所以我們知道 x += typeof f;
要執行.
又因為
ECMA 5 (13.0) defines the syntax as
javascript
function Identifieropt ( FormalParameterListopt ) { FunctionBody }
所以f
是沒有定義的, 於是typeof f
就是'undefined'
是一個string.
1+'undefined' = '1undefined'
. 所以答案就出來了.
Ref:
Function Declarations vs. Function Expressions