是一样的。首先,代码:
复制代码代码如下所示:
函数g(){
返回1;
};
如果(false){
f函数g(){
返回2;
};
}
警报((g));2
把这个代码到IE 6,铬是一种完全不同的两种效应。
输出2这里是IE6的效果,如果G出现在Chorme,它没有定义。
这也是Jscript的bug。
很明显,它只是一个函数表达式,定义G在
条件语句中,函数表达式被定义,函数没有声明。
所以直接访问肯定会出错。
那么,什么是声明,什么是函数表达式
在ECMAscript,最常用的两种
方法来
创建一个函数是一个函数的表达式和函数的声明,这两个时期之间的差异是有点晕,因为ECMA规范只明确了一点:函数的声明必须有标识符(标识符)(即我们常说的函数名称),你可以省略函数表达式中的标识符:
函数声明:
函数函数名(
参数:可选){函数体}
函数表达式:
函数函数名(可选)(参数:可选){函数体}
所以我们可以看到,如果我们不声明函数名,它必须是一个表达式。如果我们声明函数的名称,我们怎么说它是函数声明或函数表达式ECMAscript是语境的
区别,如果函数(Foo){ }是一个赋值作为它的一部分,它是一个函数表达式,如果函数(Foo){ }是包含在身体的一个函数,或是在上面,它是一个函数声明。
还有一个函数表达式是不太常见的,是括号括起来(函数),他之所以表示的
原因是因为括号()是一个分组
运算符,它只能包含内部表达式。
你可能会认为,在评价实施JSON的使用时间,JSON字符串通常包含在一个括号:eval('(' + JSON + ')'),这是因为这是分组
操作符、括号,括号将解析JSON代替一块
执行的代码表达式使分析器。