Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 由于引用错误,未找到函数名_Javascript_Jquery - Fatal编程技术网

Javascript 由于引用错误,未找到函数名

Javascript 由于引用错误,未找到函数名,javascript,jquery,Javascript,Jquery,我在控制台中遇到以下错误: Uncaught ReferenceError: jason is not defined 以下是我的javascript: $(document).ready(function jason() { console.log("test"); }); var addEvent = function(object, type, callback) { if (object == null || typeof(object) == 'un

我在控制台中遇到以下错误:

Uncaught ReferenceError: jason is not defined
以下是我的javascript:

$(document).ready(function jason() {

    console.log("test");    
});   

var addEvent = function(object, type, callback) {
    if (object == null || typeof(object) == 'undefined') return;
    if (object.addEventListener) {
        object.addEventListener(type, callback, false);
    } 
};


addEvent(window, "resize", jason());

非常感谢你的帮助

当您将它放在
$(document).ready()中时,
在该函数之外不可用。将其设置为全局并在不使用
$(document).ready()
的情况下对其进行定义,但这将在页面加载之前运行

函数jason(){
控制台日志(“测试”);
};   
var addEvent=函数(对象、类型、回调){
if(object==null | | typeof(object)=='undefined')返回;
if(object.addEventListener){
addEventListener(类型、回调、false);
} 
};
addEvent(窗口,“调整大小”,jason())

Jason的定义是错误的。只需检查下面的代码,首先定义一个函数,然后调用它

$(文档).ready(函数(){
addEvent(窗口,“调整大小”,jason());
控制台日志(“测试”);
});   
var addEvent=函数(对象、类型、回调){
if(object==null | | typeof(object)=='undefined')返回;
if(object.addEventListener){
addEventListener(类型、回调、false);
} 
};
函数jason(){
log(“调用jason函数”);
}

在Javascript中,有许多方法可以定义函数。但它们通常分为两类:函数声明和函数表达式

函数声明如下所示:

function jason() {
    console.log("test");    
}
// Anonymous function expression set to a variable
let jason = function() {
    console.log("test");    
};

// Named function expression set to a variable
let jason = function freddy() {
    console.log("test");    
};
$(document).ready(jason);
addEvent(window, "resize", jason);   
无论函数声明在代码中的位置如何,它都具有全局作用域,并且可以在程序中比定义它的位置更早地调用它。(编辑:实际上,如果函数声明嵌套在另一个函数中,则只能在该外部函数中调用)

函数表达式如下所示:

function jason() {
    console.log("test");    
}
// Anonymous function expression set to a variable
let jason = function() {
    console.log("test");    
};

// Named function expression set to a variable
let jason = function freddy() {
    console.log("test");    
};
$(document).ready(jason);
addEvent(window, "resize", jason);   
它们的作用域与任何其他变量一样。必须先设置它们,然后才能调用它们

在本例中,您创建了
jason()
作为函数表达式,但没有将其分配给变量。您确实将其命名为jason,但该名称仅在函数内部有效(如递归),而不在其他地方有效。如果您只打算使用
jason()
函数作为
$(document).ready()
的参数,那么按照您所做的定义就可以了。但由于您似乎希望在多个位置使用
jason()
,因此您需要1)将其更改为函数声明,或2)将其设置为函数表达式,在传递给
$(document).ready()
addEvent()
之前分配给变量

顺便说一下,当将函数作为参数传递时,需要去掉括号,如下所示:

function jason() {
    console.log("test");    
}
// Anonymous function expression set to a variable
let jason = function() {
    console.log("test");    
};

// Named function expression set to a variable
let jason = function freddy() {
    console.log("test");    
};
$(document).ready(jason);
addEvent(window, "resize", jason);   
如果您执行以下操作,它将执行
jason()
,并将返回的值传递给每个函数。在这种情况下,该值将是
未定义的

// Not what you want
$(document).ready(jason());
addEvent(window, "resize", jason());   
可以指定名称,但如MDN链接中所述,该名称仅在函数体中可用

导致命名函数被提升到其所在的函数或脚本元素顶部的函数声明也被删除

命名
jsan
的代码并将其作为调用
ready
的参数值提供,可防止将其视为语句并创建函数表达式


显然,如果您想在多个位置调用或引用
jsan
函数,则需要在其引用的所有位置的范围内声明它-这可能需要创建全局函数或在公共外部函数中声明它,取决于代码的结构。

您可以只在document.ready function()中编写代码


$(文档).ready(函数(){
控制台日志(“测试”);
})
var addEvent=函数(对象、类型、回调){
if(object==null | | typeof(object)=='undefined')返回;
if(object.addEventListener){
addEventListener(类型、回调、false);
} 
};
addEvent(窗口,“调整大小”)

如果我只想调用函数jason(),我将如何编写此代码?请注意,即使此时可以访问
jason
,您将作为
回调传递的也不是jason,而是它的返回值(即
未定义的
)。将函数体从
ready()
中取出并将其放置在其他位置。你可以在ready里直呼它的名字。比如
$(document).ready(jason())
Re“函数声明具有全局作用域,无论它在代码中的什么位置”-嵌套函数不会成为全局函数。传递的回调是
jsan
而不是
jsan()