猿问

js 回调函数 为什么可以获取原来所在的变量

哎呀,是我想多了好像,我运行回调函数,和调用test 方法似乎是一个道理 。。。呃

嗷嗷,好像是我想多了,和调用函数应该是一个道理,fun其实只是报存了对方法的指针,方法在堆中。


为什么js回调函数依然可以调用定义时用到的变量


var that = this;

var test = function () {

    console.log(that);

}


var page = function(fun) {

    fun();//运行回调函数

    test();//运行test函数

}


var xiaoming = {

    name : '小名',

    watch() {

        let that = this;

        

        //向page传递我的回调函数

        page(function(){

            console.log(that);

        })

    }

}

xiaoming.watch();

test函数 和 往page里面传递的回调函数 一样的代码


page中运行 回调函数 和 test函数


那么问题来了


为什么 test()//打印出window,我知道

但是为什么同样的代码


function(){

    console.log(that);

}

回调函数 能打印出 xiaoming 这个对象


运行 回调函数 的方式是有什么特别的地方吗?


我目前的理解是,当我把函数作为参数传递到另一个函数的时候, 会把我的作用域一起传递,


        page(function(){

            console.log(that);

        })

会把 that也以前传递吗。。。

我好蒙蔽呀


一只名叫tom的猫
浏览 434回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答