函数名称是否被视为Javascript中的变量?

时间:2017-04-20 20:16:14

标签: javascript variables

一个让我很困惑的快速而简单的问题是函数名称,如:

function drive() {

是被视为变量的函数名称,是否将驱动器视为变量?

2 个答案:

答案 0 :(得分:1)

函数声明在当前作用域中创建一个变量,该变量与函数同名,其值为函数。

命名函数表达式在自己的范围(而不是当前范围)中创建这样的变量

匿名函数表达式和箭头函数不会创建变量。

答案 1 :(得分:0)

是肯定的。

drive将是一个变量,其值是具有相同名称的命名函数。编译器为你声明变量,给它一个命名函数作为它的值 - 并且与变量同名,并且http://yoursite/EPiServer/shell/Stores/searchresults/?searchQuery=YOURQUERY&parameters=%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.