一个让我很困惑的快速而简单的问题是函数名称,如:
function drive() {
是被视为变量的函数名称,是否将驱动器视为变量?
答案 0 :(得分:1)
函数声明在当前作用域中创建一个变量,该变量与函数同名,其值为函数。
命名函数表达式在自己的范围(而不是当前范围)中创建这样的变量。
匿名函数表达式和箭头函数不会创建变量。
答案 1 :(得分:0)
是肯定的。
drive
将是一个变量,其值是具有相同名称的命名函数。编译器为你声明变量,给它一个命名函数作为它的值 - 并且与变量同名,并且http://yoursite/EPiServer/shell/Stores/searchresults/?searchQuery=YOURQUERY¶meters=%7B"filterOnDeleted"%3Atrue%7D&filterOnCulture=false&searchRoots=1&providerId=EPiServer_Find_Cms_SearchProviders_EnterprisePageSearchProvider&dojo.preventCache=RANDOMKEY变量。
这是由编译器hoists完成的。
因此,与任何其他变量一样,您可以重写它:
function bar(){
return 'bar';
}
bar = function(){
return 'foo';
}
console.log(bar() );//foo
但是,由于提升,更改订单不会改变结果:
bar = function(){
return 'foo';
}
function bar(){
return 'bar';
}
console.log(bar() );//also foo
这并不意味着function bar()...
块不会创建bar
变量,而只是在bar = function...
语句之前创建它。
您可以通过使用()
包装函数声明来阻止编译器创建变量:
( function bar(){
return 'foo';
});
bar(); //error
启动declare a function非常常见:
( function bar(){
alert('foo');
})();
//this will launch the alert in a browser.