zoukankan      html  css  js  c++  java
  • 全局变量,立即执行函数,局部变量,console问题

    • 第一步:进行预编译,var全局变量foo、匿名函数 function、var局部变量foo
    • 第二步:代码自上而下、自左向右执行计算:
    1. 对全局变量foo进行赋值foo={n:1};注意:此值为对象,属于引用类型;
    2. 匿名函数传入参数foo={n:1}自执行;
    3. console.log(foo);打出数字1;
    4. 由于存在foo局部变量,那么对foo变量进行赋值foo={n:3},同时更改了引用类型的参数值,全局foo变量被重新赋值foo={n:3};
    5. 对局部变量foo进行重新赋值foo={n:2};
    6. console.log(foo);打出数字2;
    7. 全局变量foo={n:3},因此,console.log(foo);打出数字3;

    -----------------------------再来一题---------------

    var myObject = {
        foo: "bar",
        func: function() {
            var self = this;
            console.log(this.foo);  
            console.log(self.foo);  
            (function() {
                console.log(this.foo);  
                console.log(self.foo);  
            }());
        }
    };
    解:
    1.第一个this.foo输出bar,因为当前this指向对象myObject
    2.第二个self.foo输出bar,因为self是this的副本,同指向myObject对象。
    立即执行函数:
    3.第三个this.foo输出undefined,因为这个IIFE(立即执行函数表达式)中的this指向window。
    4.第四个self.foo输出bar,因为这个匿名函数所处的上下文中没有self,所以通过作用域链向上查找,从包含它的父函数中找到了指向myObject对象的self。
    myObject.func();
  • 相关阅读:
    request.setCharacterEncoding("utf-8");
    JSTL的foreach循环遍历
    EL表达式的查找范围
    Unity_图形学之_shader_学习笔记(一)
    Unity_AssetBundle笔记_(一)(俗称AB包_个人笔记欢迎指正)
    Unity C#笔记 协程详解(转)
    解决方案_And_学习链接_笔记
    Unity_一些Unity内部的重要设置
    C#_异常处理
    Unity3D_Resources封装(ResourcesManager 类)
  • 原文地址:https://www.cnblogs.com/yanghai/p/14070921.html
Copyright © 2011-2022 走看看