填坑-十万个为什么?(12)

291 阅读1分钟

简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己1~多个问题。我是菜鸟 成为大神之路!

1. JavaScript 中,定义函数时用 var foo = function () {} 和 function foo(){} 有什么区别?

这两个方法的根本区别:JavaScript 函数和变量声明的“提前”(hoist)行为

  • 如果我们使用 匿名函数var foo = function () {}这种方式, 编译后变量声明foo 会“被提前”了,但是他的赋值(也就是function函数体)并不会被提前。 也就是,匿名函数只有在被调用时才被初始化

  • 如果我们使用 function foo(){}这种方式, 编译后函数声明和他的赋值都会被提前。 也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以

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

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

参考文章中有涉及:第 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…