由于参考错误,找不到函数名称

时间:2019-01-17 05:22:34

标签: 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) == 'undefined') return;
    if (object.addEventListener) {
        object.addEventListener(type, callback, false);
    } 
};


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

非常感谢您的帮助!

5 个答案:

答案 0 :(得分:3)

将其放在$(document).ready()内时,该功能之外不可用。将其设为全局并在不使用$(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());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

答案 1 :(得分:2)

在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");    
};

它们的作用域与任何其他变量一样。必须先设置它们,然后才能调用它们。

以您的情况为例,您创建了jason()作为函数表达式,但没有将其分配给变量。您确实将其命名为jason,但该名称仅在函数内部有效(如用于递归),而在其他地方则无效。如果只打算将jason()函数用作$(document).ready()的参数,则按您的定义进行操作就可以了。但是,由于您似乎想在多个地方使用jason(),因此您需要1)将其更改为函数声明,或2)使它成为在传递给{前已分配给变量的函数表达式{1}}和$(document).ready()

顺便说一句,在将函数作为参数传递时,您需要省略括号,如下所示:

addEvent()

如果您执行以下操作,它将执行$(document).ready(jason); addEvent(window, "resize", jason); 并将返回的值传递给每个功能。在这种情况下,该值为jason()

undefined

答案 2 :(得分:1)

可以给

Function expressions指定一个名称,但正如MDN链接中指出的那样,该名称仅在函数体内可用。

导致已命名的函数提升到其所驻留的函数或脚本元素顶部的函数声明也为function statements

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

很明显,如果要在多个位置调用或引用event函数,则需要在被引用的任何地方将其声明为 -这可能需要创建全局函数或声明取决于代码的结构,可以在一个通用的外部函数中使用它。

答案 3 :(得分:0)

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

$(document).ready(function() {
    addEvent(window, "resize", 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);
    } 
};

   function jason(){
    console.log("call jason function");
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

答案 4 :(得分:0)

您可以只在文档.ready function()中编写代码。

  

$(document).ready(function(){
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");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>