美文网首页
一道关于JS作用域的面试题

一道关于JS作用域的面试题

作者: Jerryli_720 | 来源:发表于2018-06-19 11:10 被阅读15次
x = 1;
var obj = {
    x: 2,
    dbl: function () {
        this.x *= 2;
        x *= 2;
        console.log(x);
        console.log(this.x);
    }
};
// 说出下面的输出结果
obj.dbl();
//解析:this.x指向当前对象,所以this.x *= 2等同于obj.x *= 2
//而x *= 2,在当前作用域中没有找到声明,则在全局作用域下查找是否有x, x *= 2等同于window.x *= 2
//日志打印输出2 4,此时window.x为2, obj.x为4

var func = obj.dbl;
func();
//func()没有前缀,所以func()相当于window.func(),此时func()中的x与this.x均指向window.x
//日志打印输出8 8,此时window.x为8, obj.x为4


var funcBind = obj.dbl.bind(obj);
funcBind();
//func()没有前缀,但是因为通过bind()方法,把funcBind()的作用域与obj的作用域绑定起来,所以func()相当于obj.dbl(),其中x作用域与上面👆一样查找x,只不过此时window.x为8, obj.x为4
//日志打印输出16 8

  1. 函数在被直接调用的时候,其中的this指针永远指向window
  2. 匿名函数 this总是指向window对象
  3. 谁执行函数,this就指向谁
  4. 如果函数new了一下,那么就会创建一个对象,并且this指向新创建的

相关文章

  • js面试题

    一道腾讯js面试题 题目如下: 对作用域链(scope chain)、执行环境(execution context...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一道关于JS作用域的面试题

    函数在被直接调用的时候,其中的this指针永远指向window 匿名函数 this总是指向window对象 谁执行...

  • 2020-05-15 浅谈js中的闭包

    一、情景引入: 关于js的作用域,我们都知道: 1.js的作用域分两种,全局和局部 2.在js作用域环境中访问变量...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • 变量声明提升

    变量声明提升是JS中一个基础的问题,同时也是对JS词法作用域认识的一个提升。在JS面试题中,关于变量声明提升的问题...

  • 学习笔记:关于JS变量作用域

    前言:今天看到一道结合了JS执行机制+作用域的题目,关于JS执行机制之前已经写过一篇文章:https://www....

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • 2019-08-13JS里面的作用域Scope

    作用域指一个变量的作用范围。 JS的作用域 在JS中,有两种作用域 全局作用域直接编写在script标签中 JS代...

网友评论

      本文标题:一道关于JS作用域的面试题

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