gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:07:50 26 4
gpt4 key购买 nike

如何在纯 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com