js面试基础知识(js 高频面试题详解)
导读:一:js 中的变量提升 例1...
一:js 中的变量提升
例1
答:2
解析:它会将当前作用域的所有变量的声明提升到程序的顶部 ,上述代码等价为:
var a;
a = 2
console.log(a); // 2
例2:
console.log(a);// undefined
var a = 2;
解析:变量的声明提升到程序的顶部;等价于:
var a;
console.log(a);
a = 2;
问题:为什么会有变量提升?
其实啊 ,js和其他语言一样 ,都要经历编译和执行阶段 ,而在编译的时候 ,会搜集所有的变量并且在本作用域内提前声明 ,而且其他代码都不会改变顺序 。
1:作用域:除了函数外 ,js是没有块级作用域
2:作用域链:内部可以访问外部的变量 ,但是外部不能访问内部的变量 。注意:如果内部有 ,优先查找到内部,如果内部没有就查找外部的。
3:js的变量声明:js的变量声明其实大体上可以分为三种:var声明 、let与const声明和函数声明 。
函数声明与其他声明一起出现的时候,是以谁为准呢?答案就是 ,函数声明高于一切 ,毕竟函数是js的第一公民 。
所以下面函数的调用会输出谁呢? 答案是 foo
foo();
function foo() {
console.log(foo);
}var foo = 2;
那么下面又会输出谁呢?
foo();
function foo() {
console.log(1);
}
function foo() {
console.log(2);
}
答案是: 2因为有多个函数声明的时候,是由最后面的函数声明来替代前面的 。
那下列程序优惠输出什么呢?
foo();
var foo = function() {
console.log(foo);
}
答案是报了Uncaught TypeError: foo is not a function 的异常
例3:
function c(){
var b=2
function a(){
console.log(b); // undefind
var b=3
console.log(b); // 3
}
a()
console.log(b); // 2
}
c()
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!