变量提拔和函数提拔基本上是口试必问问题
//先从一个口试题提及
console.log(a)
if (a) {
var a = 1;
console.log(a)
}
function a() {
console.log(this);
}
console.log(a);
a()
下面我们针对这个栗子剖析一下
我们晓得变量和很熟定义都邑提拔到作用域最前边
唯一须要确认的是变量和函数的先后递次
我们料想 函数是用第一国民会不会提拔到最前边呢?
//如果是剖析完递次是如许的
function a() {
console.log(this);
}
var a;
console.log(a)
if (a) {
a = 1;
console.log(a)
}
console.log(a);
a()
根据我们料想的剖析效果应该是
// undefined
// undefined
// 报错
来由 函数在上var鄙人,第一个console时a未赋值,其效果是undefined,if为false 只剩末了一个console也是undefined 末了a is not a function.
不过效果是
我机灵的以为 料想错了?
//再次测试
var a;
function a() {
console.log(this);
}
console.log(a)
if (a) {
a = 1;
console.log(a)
}
console.log(a);
a()
如许?对照一下效果
人工剖析效果 :
1、a()
2、1
3、1
4、a() 报错
浏览器实行效果:
没缺点!
看到这里统统圆满,不过我照样从新搜刮了一些高质量文章,发明我错了,虽然实行效果是对的,不过浏览器和人工剖析照样不一样的,和我们最最先料想的一样,函数优先。
既然题目说到了 变量 和 函数,我们就一块来说说
//简朴的栗子
function a(){ console.log(a) }
console.log(a)
var a = 1
a()
起首上边已说到我们料想和以为的是错的。
准确剖析递次是如许的
function a(){ console.log(a) }
var a;
console.log(a)
a = 1
a()
然则,这个然则很主要浏览器实行效果是:
why?这就要讲讲我所相识到的道理。
同名变量和函数,函数会提拔到最前边,变量其次,为何不那为何效果不是我们人工实行的undefined呢?原因是 变量会被疏忽,是的是疏忽。。。
function a(){ console.log(a) }
var a;//疏忽
console.log(a) //打印函数自身
a = 1
a()// a is not a function
圆满!
另有呢?是的另有同名变量是如何的递次,同名函数是如何的递次。
同名变量
console.log(a)
var a = 1
console.log(a)
var a = 2
console.log(a)
//剖析完递次是如许的
var a;
var a; //疏忽
console.log(a) // undfined
a = 1
console.log(a) //1
a = 2
console.log(a)//2
*同名变量,声明会被提拔,后边会疏忽。
同名函数
function a(){console.log(1)}
console.log(a)
function a(){console.log(2)}
console.log(a)
a()
//剖析完
function a(){console.log(1)}
function a(){console.log(2)}
console.log(a)
console.log(a)
a()
实行效果
我想你已猜到了,同名函数会被掩盖。
终究完了!
您的点赞是我继续下去的动力,感谢!