美文网首页
作用域的面试题

作用域的面试题

作者: 凉城十月 | 来源:发表于2020-08-05 11:05 被阅读0次

a)

var a = 1
function f1(){
  f2.call()
  console.log(a) // undefined
  var a=2
  function f2(){
    var a = 3
    console.log(a)
  }
}
f1.call()
console.log(a)

需要打印的那一句代码是在f1作用域范围内,这个作用域内重新声明了a,那么采用这个a,a需要进行变量提升,提升到所有操作语句的前面,所以这时候打印出来的是还没赋值的a。
等同于代码:

var a = 1
function f1(){
  var a
  function f2(){
    var a 
    a=3
    console.log(a)
  }
  f2.call()
  console.log(a) // undefined
  a=2
}
f1.call()
console.log(a)

根据调整后的代码,才是正常的执行顺序,这时的a还没有赋值。



b)
var a = 1
function f1(){
  console.log(a)
  var a = 2 //只在f1的作用域中使用
  f4.call()
}
function f4(){
  console.log(a)  //1
}
f1.call()
console.log(a)

这里的a=2只在f1的作用域使用,是不会在f4中使用的。



c)
var a = 1
function f4(){
  console.log(a)
}
??? 
f4.call()

问: ???处存在一行代码可以使得f4中的a!==1吗?
存在!比如:a=2,这句代码会在f4之前执行,这时候f4中的a就变成了2。



d)最容易出错的代码
html代码:
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
</ul>

JS代码:

var liTags = document.querySelectorAll("li")
for(let i=0;i< liTags.length;i++){
  liTags[i].onclick = function(){
    console.log(i)  //6
  }
}

在页面上不管点击哪个li,都打印出来的是6,因为此时这个循环已经走完了。

相关文章

  • 从作用域->立即执行函数->变量提升->闭包

    面试题 首先,让我们来看一题面试题; 作用域 作用域(scope)指的是变量存在的范围。Javascript只有两...

  • 无标题文章

    JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...

  • 一道面试题引发的讨论

    本文的示例代码参考scope 目录 面试题 作用域变量提升 块作用域重新绑定 函数作用域立即执行函数表达式 挑战题...

  • 作用域

    作用域(一定要掌握好 面试题 题海战术) 1,作用域: 变量起作用的区域,也就是说变量可以被访问到的区域。 2,变...

  • 读懂预编译,不怕作用域面试题

    我还记得之前很长一段时间被各种作用域面试题支配的恐惧(弱小无助.png)现在不怕啦,读懂作用域先理解预编译。来道简...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • 变量提升理解

    一道常见面试题,涉及变量作用域问题var name="Bob";(function(){if(typeof nam...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

网友评论

      本文标题:作用域的面试题

      本文链接:https://www.haomeiwen.com/subject/zwtbrktx.html