时间:2021-05-26
某天写代码突然县道这个问题,顺势总结一波
JavaScript 函数和变量声明的“提前”(hoist)行为
简单的说 如果我们使用 匿名函数
var a = {}
这种方式, 编译后变量声明a 会“被提前”了,但是他的赋值(也就是a)并不会被提前。
也就是,匿名函数只有在被调用时才被初始化。
如果使用
function a () {};
这种方式, 编译后函数声明和他的赋值都会被提前。
也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。
看一个例子
function hereOrThere() { //function statement return 'here';}console.log(hereOrThere()); // alerts 'there'function hereOrThere() { return 'there';}我们会发现alert(hereOrThere) 语句执行时会alert('there')!这里的行为其实非常出乎意料,主要原因是JavaScript 函数声明的“提前”行为,简而言之,就是Javascript允许我们在变量和函数被声明之前使用它们,而第二个定义覆盖了第一种定义。换句话说,上述代码编译之后相当于
function hereOrThere() { //function statement return 'here';}function hereOrThere() {//申明前置了,但因为这里的申明和赋值在一起,所以一起前置 return 'there';}console.log(hereOrThere()); // alerts 'there'我们期待的行为
var hereOrThere = function () { // function expression return 'here';};console.log(hereOrThere()); // alerts 'here'hereOrThere = function () { return 'there';};这段程序编译之后相当于:
var hereOrThere;//申明前置了hereOrThere = function() { // function expression return 'here';};console.log(hereOrThere()); // alerts 'here'hereOrThere = function() { return 'there';};总结
以上所述是小编给大家介绍的JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
下面就先定义一个函数:复制代码代码如下:deffoo():print('function')foo()在上述代码中,定义了一个名为foo的函数,这个函数没有参数
js静态方法复制代码代码如下:functionfoo(){}//声明类foo.method=function(){}//方法体使用:foo.method()js
疑惑出自于:复制代码代码如下:functionfoo{ this.name='foo';}alert(foo.prototype===Function.pro
方法一、functionGetCode(event){alert(event.data.foo);}$(document).ready(function(){$
一、问题的由来学懂JavaScript语言,一个标志就是理解下面两种写法,可能有不一样的结果。varobj={foo:function(){}};varfoo=