函数在Javascript中不起作用

问题描述 投票:0回答:4

我在 jQuery 中有这个函数:

$(document).ready(function(){ function MyFunction() {alert('Hello!');} });

(仅作为示例)

但是,我想用常规 Javscript 这样调用这个函数:

if(x == y){MyFunction();}

(仅作为示例)

我没工作。

但是,当我尝试时:

function MyFunction(){alert('Hello!');} if(x == y){MyFunction();}

(没有jQuery功能)

这是工作。

为什么?

javascript
4个回答
2
投票

如果你把函数放在 .ready() 之外并在 ready 函数中调用它,它会起作用,如果你把它放在 ready() 中并在 ready 之外调用它,它会给你一个错误,你可能有一个函数使用 jQuery 代码在就绪状态之外声明并在内部调用它。

    function MyFunction(){
    alert("hello!!");
    }
    //on ready
   $(document).ready(function(){
   if(x==y)
    MyFunction();
   });

1
投票

我理解你的问题是这样的{但不太清楚你在寻找什么恕我直言}

定义函数:

function MyFunction(){alert('Hello!');}

在文档准备好后调用它:

$(MyFunction);

现在只要您愿意,您就可以使用:

if(x == y){MyFunction();}

0
投票

这一行:

if(x == y){MyFunction();}

也应该出现在

document.ready
声明中。

如果您在外部调用它,它将在函数实际定义之前运行,因此会失败。


0
投票

Lesonchi 说得对。问题是“范围”。

$(document).ready(...)
调用采用一个具有其自身作用域的函数(Javascript 仅具有函数作用域)。因此,您传递给该调用的函数内定义的任何内容仅在该函数内可用。

根据你的问题,我假设你希望能够在代码中的其他地方调用该

MyFunction
方法,而不仅仅是在
$(document).ready()
中 - 因此,在该调用之外定义它会赋予它“全局”范围,并且因此可以在代码中的其他地方使用:

function MyFunction(){ /* do something */ }

$(document).ready(function(){
  MyFunction();    // call it in this scope
});

// call it in 'global' scope
if (x == y) {
  MyFunction();
}

另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope

© www.soinside.com 2019 - 2024. All rights reserved.