javascript - 将当前作用域的 jQuery/plainJS 变量/函数传递给从当前作用域调用的匿名函数

标签 javascript jquery scope

如何在纯 Javascript 或 jQuery(如果它特定于框架)中将当前作用域变量和函数传递给匿名函数。

例如:

jQuery.extend({
  someFunction: function(onSomeEvent) {
    var variable = 'some text'
    onSomeEvent.apply(this); // how to pass current scope variables/functions to this function?
    return null;

    _someMethod(arg) {
      console.log(arg);
    }
  }
});

应该将上述函数中的所有内容都登录到 firebug 中:

jQuery.someFunction(function(){
  console.log(this.variable); // or console.log(variable);
  console.log(this._someMethod(1); // or jQuery.someFunction._someMethod(2);
});

谢谢!

最佳答案

阅读“Java Script:好的部分”中有关 JavaScript 范围的示例。

在 Java 脚本中,只有函数内部有作用域。 如果您使用 var 指定函数内部变量,则无法从该函数外部访问它们。这是在 JavaScript 中创建私有(private)变量的方法。

您可以使用this 变量,它指向您所在的当前对象(这本身不是作用域)。但!如果您在没有 new 命令的情况下启动函数,那么 this 将指向外部范围(在大多数情况下它是窗口对象 = 全局范围)。

例子:

function foo(){
  var a = 10;
}
var f = foo(); //there is nothing in f
var f = new foo(); //there is nothing in f

function bar(){
  this.a = 10;
}
var b = new bar(); //b.a == 10
var b = bar(); //b.a == undefined, but a in global scope

顺便说一下,检查应用方法的语法Mozilla docs/apply 所以你可以看到,第一个参数是对象,当你的方法被调用时,它将是 this

考虑这个例子:

function bar(){ 
  console.log(this.a);
  console.log(this.innerMethod(10)); 
}

function foo(){ 
  this.a = 10;
  this.innerMethod = function(a){
     return a+10;
  }

  bar.apply(this); 
}

var f = new foo(); // => you will get 10 and 20 in the console.
var f = foo(); // => you will still get 10 and 20 in the console. But in this case, your "this" variable //will be just a global object (window)

也许做的更好

var that = this;

在调用 apply 方法之前,但也许不需要。不确定

所以,这绝对有效:

function foo(){
  console.log(this.a);
}
jQuery.extend({
 somefunc: function(func){
   this.a = 10;
   func.apply(this);
 }
});

$.somefunc(foo); //will print 10.

关于javascript - 将当前作用域的 jQuery/plainJS 变量/函数传递给从当前作用域调用的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170745/

相关文章:

javascript - 对 'let' 在 javascript 中创建的变量使用提升?

javascript - 如何在ajax post请求laravel中传递 token ?

javascript - jQuery Sidescroll,动画 ScrollLeft

scope - 使用 C 预处理器来确定当前范围?

javascript - 防止链接在模式窗口中加载单击的链接

javascript - Nivo slider 显示数字而不是背景图像

javascript - Query.orderByChild 失败 : First argument was an invalid path

javascript - jsRender - 如何从嵌套模板调用外部模板

java - 该变量的范围

scope - 动态范围界定的优点是什么?