无法找到Javascript函数

时间:2013-03-22 14:46:21

标签: javascript jquery

我在document.ready()

中有以下代码
if ($("#site-master").length > 0) {

    setMinContentHeight();

    function setMinContentHeight() {

        // removed for clarity
    }
}

我只是检查页面是否正确(#site-master),然后调用我的最小高度函数,但是我在firebug中遇到以下错误:ReferenceError:setMinContentHeight未定义。

我不是javascript专家,但这怎么可能呢?如果我将它移到document.ready()之外,该函数可以工作。我已经检查过了if语句中的代码。

另外,这是实现我想要的最佳方式吗?

提前致谢。

5 个答案:

答案 0 :(得分:10)

从不iffor声明中声明您的功能:

function setMinContentHeight() {
    // removed for clarity
}

if ($("#site-master").length > 0) {
    setMinContentHeight();
}

如果我们根据ECMAScript specification解决Chapter 12,则if子句被视为声明(以及forwhilewithtry/catch等。)

因此,遵循 Semantics 部分的 NOTE

  

已知几种广泛使用的ECMAScript实现支持   使用FunctionDeclaration作为Statement。但是有   实现中的重大且不可调和的变化   应用于此类 FunctionDeclarations 的语义。因为这些   不可调和的差异,使用FunctionDeclaration作为   Statement导致代码无法可靠地移植   实现。建议ECMAScript实现   要么禁止使用FunctionDeclaration,要么发出警告   何时遇到这种用法。 ECMAScript的未来版本可能会   定义用于声明函数的替代可移植方法   Statement上下文。

这意味着我们无法保证在这种情况下的一致行为,因此,如果在语句中声明了函数,我们将始终在strict mode中获得异常。

答案 1 :(得分:3)

if ($("#site-master").length > 0) {
    setMinContentHeight();
}
function setMinContentHeight() {
        // removed for clarity
}

您需要在全局范围内声明您的功能。

答案 2 :(得分:3)

首先,阅读the difference between var functionName = function() {} and function functionName() {}以了解函数声明与表达式。那你有什么?这两者都不是,因为函数声明需要位于函数/脚本代码的顶层 - 将它们嵌套在块中是not allowed。它被称为function statement,是非标准的,并且工作方式不同。

将它放在if - 区块之外:

// here
if ($("#site-master").length > 0) {
    setMinContentHeight();
}
// or here:
function setMinContentHeight() {
    …
}

答案 3 :(得分:2)

在之后调用来定义函数,并且不在if块中定义函数:

function setMinContentHeight() {
    // removed for clarity
}

if ($("#site-master").length > 0) {
    setMinContentHeight();
}

答案 4 :(得分:0)

也许你的浏览器兼容性有问题,但它的工作原理如下:

右:

n();
function n(){ alert('1'); }

错误:

n();
var n = function(){ alert('1'); }