首页 > 代码库 > function的定义方式function a(){}和a=function(){}
function的定义方式function a(){}和a=function(){}
一般情况下两者的调用结果是一样的,但是还是有区别的。
第一种方式:
function a(){ alert( ‘old‘ ); } var b=a; function a(){ b(); alert( ‘new‘ ); } a(); //浏览器就会出现内存溢出的情况 |
第二种方式:
function a(){ alert( ‘old‘ ); } var b=a; var a= function (){ b(); alert( ‘new‘ ); } a(); //浏览器就会按顺序alert出‘old’和‘new’ |
这里就可以很明显区分两个方式的区别了。定义的顺序不同。
第一种,刚开始其实没有重新定义 a 这个function 而在里面执行了其本身。
第二种方式, a = function () 这里没有执行到 function 里面的代码 a 已经被重新定义了。所以这里的重定义是有效的
补充1:
function a(){ alert( ‘old‘ ); } var b=a; function a(){ b(); alert( ‘new‘ ); } |
编译时: 首先a被定义为alert("old"), 接着又被定义成b();alert("new");
运行时: b = function a(){b();alert("new");}, 此时b和a一样, 函数体中直接调用b, 无论从a调用还是从b调用结果都一样, 产生堆栈溢出
另一方面
function a(){ alert( ‘old‘ ); } var b=a; var a= function (){ b(); alert( ‘new‘ ); } |
编译时: a被定义为alert("old")
运行时:
b= function a(){alert( "old" )}; a= function (){b();alert( "new" )}; |
此时b的函数体中不包括ab中任何一个, a只调用b... 无论怎样都不会产生堆栈溢出...
补充2:
一般来说,都会用第一种的写法来避免代码污染,但如果你需要保留原function,就要用第二种写法,反正两种方法都是符合w3c的。
事实上第一种写法是后来才有的,这种写法是经过优化的。
function的定义方式function a(){}和a=function(){}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。