前端笔试题(01)

问题一、

难度系数: ★★★★
相关技术点:
  1). 引用变量赋值
  2). 内存分析
  3). 函数调用传参
  4). 运算符的优先级

预热1.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01_百度</title>
</head>
<body>

<script type="text/javascript">
// 预热一
  var obj = {n: 1}    //new 一个对象,属性是n=1
  var obj2 = obj      //obj 赋值给 Obj2
  obj2.n = 2         //2 赋值给 obj2 的 n 属性
  console.log(obj.n) // ?    obj.n 为 2

</script>
</body>
</html>

答案:2

预热2

// 预热二
  function fn1(a) {    //函数传递对象 a
    a.n = 3             // a 的 n属性赋值为3
  }
  fn1(obj)        // fn1接收 obj         
  console.log(obj.n)  // ?   obj 的 n属性

答案:n=3 (函数 a 将 n的值改为3)

预热3

// 预热三
  function fn2(a) {
    a = {n:4}      //将对象赋值给 a
  }
  fn2(obj)         fn2接收 obj(但并没有改变obj的值)    
  console.log(obj.n) // ?

答案:n=3(并没有改变obj的值)

正式题目

 var a = {n: 1}  //定义一个对象属性n=1赋值给变量 a
  var b = a  //将变量a 赋值给 变量b
  a.x = a = {n: 2}  //1.连续赋值从右向左 2.a.x的优先级比=更高,故向其中添加变量x

  console.log(a.n, b.n) // ? ?
  console.log(a.x, b.x) // ? ?

1.

 var a = {n: 1}  //定义一个对象属性n=1赋值给变量 a
  var b = a  //将变量a 赋值给 变量b
  a.x = a = {n: 2}  //1.连续赋值从右向左 2.a.x的优先级比=更高,故向其中添加变量x
                    //将对象n=2赋值给变量a

  console.log(a.n, b.n) // ? ?
  console.log(a.x, b.x) // ? ?

2.

 var a = {n: 1}  //定义一个对象属性n=1赋值给变量 a
  var b = a  //将变量a 赋值给 变量b
  a.x = a = {n: 2}  //1.连续赋值从右向左 2.a.x的优先级比=更高,故向其中添加变量x
                    //将对象n=2赋值给变量a
                    //再将a赋值给 a.x
  console.log(a.n, b.n) // ? ?
  console.log(a.x, b.x) // ? ?

3.

综上,可知  console.log(a.n, b.n) //  2  1

                    console.log(a.x, b.x) // undefined   2(对象)

问题二   

1. 难度系数: ★★★
2. 技术点:
  1). 作用域与作用域链
  2). 变量查找

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_腾讯1</title>
</head>
<body>

<script type="text/javascript">
  var x = 10    //变量x=10
  function fn() {   //定义函数fn
    console.log(x)  //打印输出 x
  }
  function show(f) {   //定义函数show 并接受参数 f
    var x = 20     //变量x=20
    f()             //调用参数 f
  }
  show(fn) // ?
</script>
</body>
</html>

分析:

  console.log(x)   输出x,但在当前作用域里面并没有 x ,会沿着作用域链查找,即在全局作用域中查找,故输出10

问题三   

1. 难度系数: ★★★
2. 技术点:
  1). 作用域与作用域链
  2). 变量查找

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_美团1</title>
</head>
<body>

<script type="text/javascript">

  var fn = function () {
    console.log(fn)
  }
  fn() // ? function定义

  var obj = {
    fn2: function () {
      console.log(fn2) 
    }
  }
  obj.fn2() //  ? 报错

var obj = {
    fn3: function () {
      
     
   console.log(this.fn3) // obj.fn3也行, 但比较死
    }
  }
  obj.fn3() //  ? function 定义
</script>
</body>
</html>

1.fn()  输出:

   

 首先生成全局作用域,在定义函数后生成函数作用域,在函数作用域中去找变量fn ,先在当前作用域中找,但并没有;

然后沿着作用域链去外部找,在外部正好有fn,其值是函数对象,所以输出的就是这个函数

2.  obj.fn2() 输出

 首先生成全局作用域,在定义函数后生成函数作用域,在函数作用域中去找变量fn2 ,先在当前作用域中找,但并没有;

然后沿着作用域链去外部找,外部全局变量也没有fn2,故报错未定义fn2

3. obj.fn3() 输出

猜你喜欢

转载自blog.csdn.net/jianghao233/article/details/81516512