js题集2
1.输出结果和原因
console.log(a); // undefined
console.log(b); // b is not defined
window.b = 10;
var a = 20;
2.函数表达式和函数声明的特点。
如果不声明函数名称,一定是表达式 ;如果声明名称,要通过上下文来区分,如果function foo( ){ }是作为表达式的一部分,它是一个函数表达式,如果被包含在一个函数体内,或者位于程序的最顶部,是函数声明。
一种不常见的函数表达式,就是被括号括住的(function foo( ){ }),()是分组操作符,它的内部只能包含表达式。
表达式和声明存在非常微妙的差别:
首先,函数声明会在任何表达式被解析和求值之前先被解析和求值,即使声明在代码的最后一行,也会在作用域内第一个表达式之前被解析/求值。
另外,函数声明在条件语句内可用,但未被标准化,不同环境可能会有不同的执行结果,所以这种情况下,最好使用函数表达式
函数声明(Statement)的实际规则如下:
函数声明只能出现在程序或函数体内。
【从句法上讲,他们不能出现在Block(块)({ })中,例如不能出现在if,while或for语句中。因为Block中只能包含Statement语句,而不能包含函数声明这样的源元素。另一方面,唯一可能让表达式出现在Block中情形,就是作为表达式语句的一部分。但是表达式语句不能以关键字function开头。也就是说,函数表达式同样不能出现在Statement语句或Block中(因为Block就是由Statement语句构成的)。】