Javascript模式——函数提升 (笔记)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript模式——函数提升 (笔记)相关的知识,希望对你有一定的参考价值。
函数提升:
对于所有的变量,无论函数体的何处进行声明,都会在后台被后台被提升到函数顶部。而对于函数同样适用,其原因在于函数只是分配给变量的对象。当使用函数声明时,函数定义也被提升,而不仅仅只是函数声明。
function foo(){
alert(‘global foo‘);
}
function bar (){
alert(‘global bar‘);
}
function hoistMe(){
console.log(typeof foo); //function 变量foo以及实现都被提升
console.log(typeof bar); //undefined bar变量被提升 函数实现没有被提升
foo(); //global foo
bar(); //Uncaught TypeError: bar is not a function
function foo(){
console.log(‘global foo‘);
}
var bar =function(){
console.log(‘local foo‘);
};
}
hoistMe();
//hoistMe()函数中的foo()和bar移动到了顶部,从而覆盖了foo和bar函数
作用域:
javascript中仅存在函数作用域。在函数内部以var 关键字定义的任何变量都是局部变量,对于函数外部是不可见的。如果if条件语句或在for、while循环中,使用var关键字定义一个变量,这并不意味着该变量对于if或for来说是局部变量。它仅对包装函数来说是局部变量,并且如果没有包装函数,它将成为一个全局函数。
//这里for中定义的i是局部变量。作用域仅在part中 function part(){ for(var i=0;i<10;i++){ //.......... } } //这里这里for中定义的i是全部变量。 for(var i=0;i<10;i++){ //.......... }
函数命名属性:
function fn(){} //函数声明
var fn=function(){};//函数表达式
var fn=function fn(){};//函数命名表达式
在调试器中调试时,name属性是非常有用的,当调试器需要展示函数中的错误时,它可以检测name属性是否存在,并将其作为一个指示符。
name属性也可用于在自身内部递归调用同一个函数。
以上是关于Javascript模式——函数提升 (笔记)的主要内容,如果未能解决你的问题,请参考以下文章