精华内容
下载资源
问答
  • 匿名函数的this指向
    2019-12-03 21:09:32

    JavaScript中匿名函数this指向问题

    this对象是在运行时基于函数执行环境绑定的,在全局函数中,this=window,在函数被作为某个对象的方法调用时,this等于这个对象。

    但是匿名函数的执行环境是全局性的

        var name = 'window'
        var person = {
            name :'Alan',
            sayName:function () {
                return function () {
                    console.log(this.name)
                }
            }
        }
        person.sayName()()  // window 
    

    这里sayName方法return了一个匿名函数,这个匿名函数中this指向window

    解决方法还是有的,我们可以把外部作用域的this传递给匿名函数

        var name = 'window'
        var person = {
            name :'Alan',
            sayName:function () {
                var that = this
                return function () {
                    console.log(that.name)
                }
            }
        }
        person.sayName()()  // Alan
    更多相关内容
  • var a = 10; (function() { console.log(a) a = 5 console.log(window.a) ... 语句定义了一个局部变量 a,由于js的变量声明提升机制,局部变量a的声明会被提升至立即执行函数函数体最上方,且.

    参考文章:https://www.jb51.net/article/161019.htm

    var a = 10; 
    (function() {
        console.log(a) 
        a = 5 
        console.log(window.a) 
        var a = 20;
        console.log(a)
    })()

    解析:在立即执行函数中,var a = 20; 语句定义了一个局部变量 a,由于js的变量声明提升机制,局部变量a的声明会被提升至立即执行函数的函数体最上方,且由于这样的提升并不包括赋值,因此第一条打印语句会打印undefined,最后一条语句会打印20。

    由于变量声明提升,a = 5; 这条语句执行时,局部的变量a已经声明,但是匿名函数的执行是具有全局性的,因此它产生的效果是对局部的变量a赋值,此时window.a 依旧是最开始赋值的10。

    var name = 'window'
    var person = {
        name: 'Alan',
        sayOne: function() {
            console.log(this.name)
        },
        sayTwo: function() {
            return function() {
                console.log(this.name)
            }
        }
    }
    person.sayOne() //Alan
    person.sayTwo()() // window

    1. 函数内部的this指向调用者
    2. sayOne调用者是person对象,所以this指向person;
    3. sayTwo的调用者虽然也是person对象,但是区别在于这次调用并没有打出this而是在全局返回了一个匿名函数
    4. 而这个匿名函数不是作为某个对象的方法来调用执行,是在全局执行

    做下修改

    var name = 'window'
        var person = {
            name :'Alan',
            sayName:function () {
                var that = this
                return function () {
                    console.log(that.name)
                }
            }
        }
        person.sayName()()  // Alan

    延伸

    【变量提升】下面代码的输出是什么?

    function sayHi() {
        console.log(name);
        console.log(age);
        var name = "Lydia";
        let age = 21;
    }
    sayHi();
    • A: Lydia 和 undefined
    • B: Lydia 和 ReferenceError
    • C: ReferenceError 和 21
    • D: undefined 和 ReferenceError

    答案: D

    在函数中,我们首先使用var关键字声明了name变量。 这意味着变量在创建阶段会被提升(JavaScript会在创建变量创建阶段为其分配内存空间),默认值为undefined,直到我们实际执行到使用该变量的行。 我们还没有为name变量赋值,所以它仍然保持undefined的值。
    使用let关键字(和const)声明的变量也会存在变量提升,但与var不同,初始化没有被提升。 在我们声明(初始化)它们之前,它们是不可访问的。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量时,JavaScript会抛出一个ReferenceError

    展开全文
  • 匿名函数this指向

    千次阅读 2018-12-04 15:31:33
    匿名函数中的this指向 在一般情况下,this对象是在运行时基于函数的执行环境绑定的。若是在全局函数中,则this指向window;当函数被作为某个对象的方法调用时,this指向该对象。但是在匿名函数中...

    匿名函数

    在函数表达式中,创建一个函数并将它赋值给一个变量,若此时function关键字后没有标识符,那么创建的函数可称为匿名函数

    匿名函数中的this指向

    在一般情况下,this对象是在运行时基于函数的执行环境绑定的。若是在全局函数中,则this指向window;当函数被作为某个对象的方法调用时,this指向该对象。但是在匿名函数中,因为匿名函数的执行环境具有全局性,所以它的this一般指向window。

    var name = "The Window";
      var object = {
        name : "My Object",
        //var that=this; //可以更改this指向,使之指向当前的object对象
        getNameFunc : function(){
          return function(){
            return this.name;
          };
        }
      };
      alert(object.getNameFunc()());  // 输出为  The Window“”
    

    上面的代码中,getNameFunc()函数中返回的是匿名函数,匿名函数中的this指向的是window,因此输出的是全局变量the window。
    为什么?因为object.getNameFunc()()可以拆解如下

    var  f = object.getNameFunc(); //返回的是一个匿名函数;
         f(); //相当于调用了该匿名函数,此时的调用者是window对象。所以this会指向window
    

    如果想要匿名函数的this能够执行当前的object对象,那么就要更改this。可以在匿名函数外添加一行:var that=this----即更改this的指向,更改this的指向还可以用call、apply、bind,输出代码改为下面这行即可将this指向更改指向object对象。call、apply、bind是有区别的,共同点是可以改变执行环境上下文且第一个参数都是指定的对象,不同点:1.apply的第二个参数是数组,这一点和call和bind不一样,call和bind可以传递多个参数。2.bind()返回了改变了执行上下文环境的函数但是不会立即执行该函数,而call()和apply()会直接执行该函数。

    alert(object.getNameFunc().call(object));  //输出 “my object”
    alert(object.getNameFunc().apply(object));  
    

      利用bind方法,bind(object)()

    alert(object.getNameFunc().bind(object)());  
    

    事例如下:
    下述为一个匿名自执行函数,诚如所知,函数名实际上只是一个指向函数对象的指针,对于匿名函数而言,没有函数名。将匿名函数用一对圆括号包含表示是一个函数表达式(如:(function() {}),而后面的 () 表示调用

    var a=2;
    (function() {
         var a=3;
         return this.a;
    })()       //输出为 2,this指向的是window
    
    展开全文
  • this匿名函数中的指向问题

    参考https://blog.csdn.net/Qian_mos/article/details/84786502
    https://blog.csdn.net/qq_42292831/article/details/119007403

    1. 匿名函数A作为函数getNameFunc 返回值时,匿名函数A中this指向(输出为 The Window)
        var name = "The Window";
        var object = {
            name : "My Object",
            //var that=this; //可以更改this指向,使之指向当前的object对象
            getNameFunc : function(){
                return function(){
                    return this.name;
                };
            }
        };
        alert(object.getNameFunc()());  // 输出为  The Window
    
    1. 对比1:一般情况(输出为 My Object)
        var name = "The Window";
        var object = {
            name : "My Object",
            //var that=this; //可以更改this指向,使之指向当前的object对象
            getNameFunc : function(){
                return this.name
            }
        };
        alert(object.getNameFunc());  // 输出为  My Object
    
    1. 对比2:匿名函数A作为函数参数时,函数A中this的指向
        function Person() {
            console.log(this);//指向Person对象person
            setInterval(function fun() {
                // 在非严格模式下,fun() 函数的 this 指向 window 对象
                console.log(this);//指向Window对象
            }, 1000);
        }
        var person = new Person();
    
    展开全文
  • 网上看到一句话,匿名函数的执行是具有全局性的,那怎么具有的全局性呢? this指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 1.案例...
  • 在函数被作为某个对象的...但是匿名函数的this是window, 如果要修改匿名函数this指向,可以使用这样的办法。 var name = 'window' var person = { name :'Alan', sayName:function () { return function (...
  • js中匿名函数和箭头函数的this指向

    千次阅读 2018-09-30 16:10:09
    匿名函数最经典的总结:就是谁调用匿名函数匿名函数中的this指向谁;匿名函数是有执行上下文,只是执行上下文是执行的时候传递过来,箭头函数中的执行上下文是父级的执行上下文,匿名函数可以作为箭头函数的父级...
  • 普通函数this指向函数的对象 箭头函数中的this指向函数所在作用域指向的对象 关于作用域是什么,可以自行Google一下,后面会用例子说明 1.普通函数 代码: function test(){ var a = 1; console.log(this.a);...
  • 对象中的方法的this指向 情形1:方法中返回箭头函数 x = 11 obj = { x:22, dbl:function(){ return ()=>{return this.x} } } console.log(obj.dbl()()) //答案为22 情形2:方法中返回匿名函数 x = 11 obj = { x:...
  • js闭包中的this(匿名函数中的this指向的是windows) 一、总结 1、普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2、让匿名函数中的this指向对象的两种方法 可以使用对象...
  • JS中的函数this指向

    2021-12-25 12:02:49
    this指向不因位置的改变而改变 ... // 1 自调用函数(匿名函数)中的this指向:window (function(){console.log('111');})() ;(function(){console.log('222');})() !(function(){console.log('333'
  • 箭头函数和普通函数的this区别如下。 普通函数:调用时被决定。 根据调用我的人(谁调用我,我的this就指向谁), this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this...匿名函数this指向window ...
  • 匿名函数this指向window var name = "小明"; var Data = { name: "xiaoming", init: function() { setTimeout(function() { console.log(this.name); //'小明' }, 1000) } } Dat...
  • js函数this指向

    千次阅读 2020-10-08 22:45:03
    函数在执行时内部会默认创建一个对象叫this,以不同的方式调用函数,内部的this指向是不一样的,this的指向在函数定义的时候是不能确定的,只有调用执行了函数以后才能确定this到底指向谁。谁直接调用了产生this的...
  • 关于this指向问题一直是js基础的热门问题,最近参与公司面试问过很多面试者总觉得有点模糊。所以自己想着总结一下: this的指向在函数定义的时候是确定不了的,只有在函数执行的时候,指向调用它的对象。 一、全局...
  • 1、this指向window 声明式函数 匿名函数 定时器 延时器 forEach循环 2、this指向事件源 事件绑定中,事件处理函数 this指向默认是事件源,也就是绑定事件的标签对象 3、this指向数组/对象 数组/对象 中存...
  • 本文介绍了js匿名函数和闭包的相关内容,供大家参考,具体内容如下 匿名函数 [removed] //function(){}//会报错 var fun = function(){};//将匿名函数赋值给变量 (function(){})();//匿名函数自执行 function...
  • 箭头函数及其this指向

    千次阅读 2022-04-05 11:10:22
    箭头函数 ...1、普通函数this指向: 指向它的调用者,如果没有调用者则默认指向window 2、箭头函数指向: 指向箭头函数定义的时候所处的对象,而不是其所使用的时候所处的对象,默认指向父级的this 综上:
  • ES6箭头函数的写法: const sum =(num1,num2)=>{ return num1 + num2; } 更简化的写法 const sum = (num1, num2) => num1 + num2; 简单理解的办法就是将function简化为const, sum(num1,num2)简化...
  • 最近学习了一下函数this指向的问题,在此分享出来也方便自己日后巩固学习。 普通函数与ES6中箭头函数里,this指向的问题 一、普通函数中this (1)总是代表着它的直接调用者,如obj.fn,fn里的最外层this就......
  • 箭头函数里的this指向问题

    千次阅读 2022-01-23 18:01:29
    箭头函数的基础指向问题,简单易懂!!!
  • 箭头函数 改变this指向

    千次阅读 2020-04-09 22:55:57
    1.箭头函数 <div>我是div</div> <script> const oDiv = document.querySelector('div'); // 普通函数 oDiv.addEventListener('click' , function(){ cons...
  • JS-ES6中箭头函数和普通函数this指向问题 一、普通函数中的this (1)普通函数中的this代表它的直接调用者,如obj.fn(),fn的this指向就是obj (2)默认情况下,没有直接的调用者,this的指向为window (3)严格模式...
  • 在网上看到很多关于箭头函数this指向的博客和问题解答,但是基本写的都不准确,有的甚至是错误的,在其他博客网站得到的答案基本就是“箭头函数在定义时this指向谁那么之后就一直指向谁”,这句话虽然不错,但是这不...
  • 1、普通函数中的this总是指向调⽤它的那个对象,箭头函数没有⾃⼰的this,他的this永远指向其定义环境,任何⽅法都改变不了其指向,如call()、bind()、apply()。(正是因为它没有this,所以也就不能⽤作构造函数,也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,142
精华内容 24,456
关键字:

匿名函数的this指向