我在document.ready()
中有以下代码if ($("#site-master").length > 0) {
setMinContentHeight();
function setMinContentHeight() {
// removed for clarity
}
}
我只是检查页面是否正确(#site-master),然后调用我的最小高度函数,但是我在firebug中遇到以下错误:ReferenceError:setMinContentHeight未定义。
我不是javascript专家,但这怎么可能呢?如果我将它移到document.ready()之外,该函数可以工作。我已经检查过了if语句中的代码。
另外,这是实现我想要的最佳方式吗?
提前致谢。
答案 0 :(得分:10)
从不在if
或for
声明中声明您的功能:
function setMinContentHeight() {
// removed for clarity
}
if ($("#site-master").length > 0) {
setMinContentHeight();
}
如果我们根据ECMAScript specification解决Chapter 12,则if
子句被视为声明(以及for
, while
,with
,try/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'); }