填坑十萬個為什麼?(12)

NO IMAGE

簡介:很多概念不清或忘記,重新構建自己的知識體系。每天問自己1~多個問題。我是菜鳥 成為大神之路!

1. JavaScript 中,定義函數時用 var foo = function () {} 和 function foo(){} 有什麼區別?

這兩個方法的根本區別:JavaScript 函數和變量聲明的“提前”(hoist)行為

  • 如果我們使用 匿名函數var foo = function () {}這種方式, 編譯後變量聲明foo 會“被提前”了,但是他的賦值(也就是function函數體)並不會被提前。
    也就是,匿名函數只有在被調用時才被初始化

  • 如果我們使用 function foo(){}這種方式, 編譯後函數聲明和他的賦值都會被提前。
    也就是說函數聲明過程在整個程序執行之前的預處理就完成了,所以只要處於同一個作用域,就可以訪問到,即使在定義之前調用它也可以

foo();
function foo(){
    console.log('一次執行');
}

填坑十萬個為什麼?(12)

var number = 0;
function foo(){
    console.log('一次執行',number);
}
foo();
function foo(){
    console.log('二次執行',number);
}
foo();

填坑十萬個為什麼?(12)

參考文章中有涉及:第 13 天內容

var foo = function(){}
var foo = function(){}();

function(){}
function(){}()
(function(){})();
(function(){}());

function foo(){}
function foo(){}();
function foo(){}(a);
(function foo(){});
(function foo(){})();
!function(){}();
new function(){}();

參考文章:
www.cnblogs.com/TomXu/archi…
www.cnblogs.com/shuishuowob…

相關文章

填坑十萬個為什麼?(16)前15天小結

填坑十萬個為什麼?(15)

填坑十萬個為什麼?(14)

填坑十萬個為什麼?(13)