Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用传递给JQuery处理程序的函数_Javascript_Jquery - Fatal编程技术网

Javascript 调用传递给JQuery处理程序的函数

Javascript 调用传递给JQuery处理程序的函数,javascript,jquery,Javascript,Jquery,功能测试(){ var str='adarsh'; //f1();-这会给出一个错误。 $('body')。单击(函数f1(){ console.log(str); }); } test() 函数“f1”的作用域是什么 它的范围不限于任何东西。函数的引用只提供给处理程序,因此没有定义指向该函数的其他内容。如果要定义函数以便在多个位置调用,则需要将逻辑更改为以下内容: function test() { var str = 'adarsh'; $('body').click(fu

功能测试(){
var str='adarsh';
//f1();-这会给出一个错误。
$('body')。单击(函数f1(){
console.log(str);
});
}
test()
函数“f1”的作用域是什么

它的范围不限于任何东西。函数的引用只提供给处理程序,因此没有定义指向该函数的其他内容。如果要定义函数以便在多个位置调用,则需要将逻辑更改为以下内容:

function test() {
    var str = 'adarsh';
    $('body').click(function() { // < note the anonymous function here
        f1(str);
    });
}

function f1(str) {
    console.log(str);
}

test();
f1('foo bar');
功能测试(){
var str='adarsh';
$('body')。单击(function(){//<注意此处的匿名函数
f1(str);
});
}
函数f1(str){
console.log(str);
}
test();
f1(“富吧”);
FunctionExpression中的BindingIdentifier可以从FunctionExpression的FunctionBody内部引用,以允许函数递归调用自身。但是,与FunctionDeclaration不同,FunctionExpression中的BindingIdentifier不能从引用,也不会影响包含FunctionExpression的作用域。@@@

换句话说,当您有一个函数表达式,如
function someName(){…}
(不要与函数声明混淆),该名称绑定在函数内部,而不是包含范围内

fun=函数someName(){
警报(someName);//有效
};  
警报(someName的类型);//不起作用

乐趣()函数声明将:

  • 创建一个与当前作用域中的函数同名的变量
命名函数表达式(即您在此处看到的)将:

  • 在该函数的作用域内创建一个与函数同名的变量(这对于递归调用自身很有用)
  • 作为功能进行评估
因此,有两种方法可以访问使用命名函数表达式创建的函数:

  • 在表达式的左侧放置一些内容。在本例中,通过将其传递给
    click()
    ,您已经在执行此操作,因此
    click
    函数可以对其执行某些操作
  • 从内部按名称称呼它
test
的范围内没有进一步的参考

然而,我想知道,如果我们不能通过匿名访问函数,那么在这样的上下文中命名“匿名”函数有什么意义

正如我所说,这个变量对于递归调用它很有用

名称(与变量不同)在调试器中显示时也很有用。处理一个由十几个有用名称组成的stacktrace要比处理一个只有十几个重复的
(匿名函数)
简单得多

调用传递给JQuery处理程序的函数

您可以使用
jQuery.\u data()
访问并调用
click
f1
,在
之外的
事件处理程序。click()

功能测试(){
var str=“adarsh”;
//f1();-这会给出一个错误。
$(“正文”)。单击(函数f1(){
console.log(str);
});
var ref=$.\u数据(document.body,“events”)[“单击”][0];
日志(ref.handler,ref.handler.name);
参考handler()
}
test()


单击
您的
f1()
函数的作用域不限于任何内容。函数的引用仅提供给处理程序。因此,您无法访问它。我在@JonathanBrooks中使用它,但它不会从点击处理程序之外的任何地方调用
f1()
,这是操作要点。这里的巨人之战:DAlso有时可读性很好。例如,
[1,2,3].sort(函数降序(a,b){return a
您可以在代码段中包含一个简单的
函数声明
,以便更清楚地看到与
命名函数表达式
的区别。