Nea*_*eal 1 javascript function
以这些方式声明函数之间是否存在主要区别:
function foo(){
alert('BAR');
}
Run Code Online (Sandbox Code Playgroud)var foo = function (){
alert('BAR');
}
Run Code Online (Sandbox Code Playgroud)var foo = function bar(){
alert('BAR');
}
Run Code Online (Sandbox Code Playgroud)我在这里被告知:
它发生在不同的时间,并导致变量引用匿名函数.函数声明发生在作用域中执行的任何逐步代码之前,并导致绑定和具有正确名称的函数.
我声明我的函数的方式是否真的会影响我的代码的效率,如果是这样,最好使用哪种方式?
是的,存在重大差异.
第一个是函数声明.在处理任何逐步代码之前,它会在进入执行上下文时发生.它不能在任何类型的控制块内(例如,它在if
声明的正文中是不合法的;但是,如果你这样做,大多数浏览器将试图容纳它 - 有时导致非常令人惊讶的行为 - 与规范不一致).它产生一个命名函数.
第二个是函数表达式(具体地,是匿名函数表达式).与所有表达式一样,它是在逐步执行代码时遇到的.和所有表达式一样,它可以在一个控制块内.它导致一个函数没有为具有名称的变量分配名称.
第三个是命名函数表达式.它是一个像上面这样的函数表达式,但函数也有一个名字.你想用IE8和更早版本来避免这些,因为IE实际上会把它弄错,创建两个独立的函数(在两个不同的时间).(基本上,IE将其视为函数声明和函数表达式.)IE9最终得到了正确的结果.
请注意,您的第二个和第三个示例依赖于自动分号插入; 因为那些都是赋值语句,它们应该以;
(在}
函数结束之后)结束.
归档时间: |
|
查看次数: |
157 次 |
最近记录: |