zoukankan      html  css  js  c++  java
  • 关于This的经典题目

    这个题目见过很多次了  

    var x = 10;
    var foo = {
        x: 20,
        bar: function() {
            var x = 30;
            return this.x;
        }
    };
    
    alert(foo.bar());
    alert((foo.bar)());
    alert((foo.bar = foo.bar)());
    alert((foo.bar, foo.bar)());

    在开始前,在console中输入
    a = 1 ;
    b = 2;
    (a, b);
    将直接显示2 这表明逗号运算符直接返回后面一个表达式计算结果

    再看
    a = b 以及 (a = b)
    输出2 表示赋值运算符返回赋值后结果
    这里相当于定义了一个 tmp = foo.bar() 然后tmp()

    但是 a.b() (a.b)() 看起来他们很不同 一个a对象调用了b() 第二个好像是函数运算
    实际上由于 a.b 这个表达式没有作什么运算 编译器会去掉一层括号 当做 a.b()来运算

    所以这里前两个的结果肯定是相同的 后两个也是  此题的结果是 20 20 10 10

    你可能会问啦 为什么后面的提示的值不是20 却是10
    因为后面两个是函数表达式 你可以认为是匿名函数
    他们相当于

    (function(){
      var x = 30;
      console.log(this.x); //10
      return this.x;
    })();
  • 相关阅读:
    xmpp1
    综合
    CSS进阶(一)width & height
    CSS进阶(二)content
    TypeScript 学习笔记-JSDoc
    TypeScript学习笔记-声明合并
    TypeScript 学习笔记-模块
    TypeScript学习笔记-高级类型
    TypeScript学习笔记-类型兼容性
    TypeScript学习笔记-枚举
  • 原文地址:https://www.cnblogs.com/cart55free99/p/4189226.html
Copyright © 2011-2022 走看看