翼度科技»论坛 编程开发 JavaScript 查看内容

js 高频面试题详解

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
一:js 中的变量提升

例1
  1. a = 2;
  2. var a;
  3. console.log(a);
复制代码
答:2
解析:它会将当前作用域的所有变量的声明提升到程序的顶部,上述代码等价为:
  1. var a;
  2. a = 2
  3. console.log(a); // 2
复制代码
例2:
  1. console.log(a);// undefined
  2. var a = 2;
复制代码
解析:变量的声明提升到程序的顶部;等价于:
  1. var a;
  2. console.log(a);
  3. a = 2;
复制代码
问题:为什么会有变量提升?

其实啊,js和其他语言一样,都要经历编译和执行阶段,而在编译的时候,会搜集所有的变量并且在本作用域内提前声明,而且其他代码都不会改变顺序。
1:作用域:除了函数外,js是没有块级作用域
2:作用域链:内部可以访问外部的变量,但是外部不能访问内部的变量。 注意:如果内部有,优先查找到内部,如果内部没有就查找外部的。
3:js的变量声明:js的变量声明其实大体上可以分为三种:var声明、let与const声明和函数声明。
函数声明与其他声明一起出现的时候,是以谁为准呢?答案就是,函数声明高于一切,毕竟函数是js的第一公民。
所以下面函数的调用会输出谁呢? 答案是  foo
  1. foo();
  2. function foo() {
  3.     console.log('foo');
  4. }<br>var foo = 2;
复制代码
那么下面又会输出谁呢?
  1. foo();
  2. function foo() {
  3.     console.log('1');
  4. }
  5. function foo() {
  6.     console.log('2');
  7. }
复制代码
答案是: 2  因为有多个函数声明的时候,是由最后面的函数声明来替代前面的。
那下列程序优惠输出什么呢?
  1. foo();
  2. var foo = function() {
  3.     console.log('foo');
  4. }
复制代码
答案是报了Uncaught TypeError: foo is not a function 的异常
例3:
  1. function c(){
  2. var b=2
  3.     function a(){
  4.          console.log(b); // undefind
  5.          var b=3
  6.          console.log(b); // 3
  7.    }
  8.    a()
  9.    console.log(b); // 2
  10. }
  11. c()
复制代码
 

来源:https://www.cnblogs.com/Live-up-to-your-youth/p/17219601.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具