javascript - 试图通过函数传递 `this`

标签 javascript

我有一个本地化到主函数的函数,我想使用 this 来调用它,但它似乎不起作用。

我的代码有:

function option(room,slot){

    var div_id = document.getElementById(room);
    var opacity = window.getComputedStyle(div_id).opacity

    transition_opacity(div_id,opacity,0,function(){this.load});


    function load(){
    console.log('test'); //does not happen      
       }
}

我是不是误解了 this 的用法,或者当我使用 function(){} 调用 load 时范围丢失了?

最佳答案

从您的代码来看,this 可以引用什么对象并不明显。这取决于 option 的调用方式。但是,如果您在 option 函数中定义了 load 函数,最好直接引用它。不过,您必须将 test 的声明移至 transition_opacity 调用之上:

function option(room,slot){
    var div_id = document.getElementById(room);
    var opacity = window.getComputedStyle(div_id).opacity;

   function load() {
       console.log('test');
   }

   transition_opacity(div_id,opacity,0,load);
}

如您所见,我只是直接引用load。您可以创建另一个调用 load 函数的函数(即 function() { load(); } – 注意括号 calls 函数)但这不会给你带来任何好处,只会向堆栈添加另一个不需要的函数。所以只引用实际功能本身。

有关 this 关键字的更多信息,请查看 this question .剧透:它比你想象的要复杂。

关于javascript - 试图通过函数传递 `this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437681/

相关文章:

javascript - 单击选项卡时在 HTML 中跳转

javascript - Vue 与 VCalendar 组件 : Keep data in sync with another Vue instance

javascript - 如何将 babel 与 React 将使用的 npm 包一起使用

javascript - 使用无限 JavaScript 循环创建计划报告

javascript - JSON 字符串化将 47 字节的 json 字符串变成 340mb?

javascript 将函数对象传递给 Web Worker - 错误 DataCloneError 无法克隆

javascript - Angular 副本在选择中创建重复条目

javascript - 获取每年 GitHub 用户贡献的数量

javascript - AngularJS ui-grid 更改可扩展行列的标题模板

javascript - 从 AJAX 请求返回 while 循环