在php文件中我有一个脚本,例如这个片段:
<script>
$(function(){
$("#tabs_<?php echo $keyCode ?>").tabs();
var x = document.getElementById("bkhmode_<?php echo $keyCode ?>");
var mode = x.value;
setcont_<?php echo $keyCode ?>(mode);
});
</script>
我想将这段代码与许多其他行一起删除到一个单独的JS文件中以利用缓存但是我一直无法找到相当于DEFINE的命令来允许我替换 php echo 。
我想
DEFINE KEY_CODE = 'somevalue';
然后该片段看起来像这样:
<script>
$(function(){
$("#tabs_KEY_CODE").tabs();
var x = document.getElementById("bkhmode_KEY_CODE");
var mode = x.value;
setcont_KEY_CODE(mode);
});
</script>
大多数语言允许这样做,但我无法在JavaScript中找到任何相同的内容。有什么建议吗?
答案 0 :(得分:0)
您可以将变量设置为全局窗口命名空间,虽然它被认为是不好的做法,因为它可能会干扰其他程序,所以要小心。
window.KEY_CODE = 'somevalue';
$(function() {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
});
这应该有效,尽管通常的做法是与IIFE一起做。
(function(window, document, $, undefined) {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
})(window, window.document, window.jQuery);
这有助于解决许多命名空间问题,因为它们已在本地范围内明确定义。
您还可以使用全局变量来运行函数。 如果您的函数在IIFE之外声明(即您只是在全局命名空间中运行它),它也会附加到窗口元素。例如,这些是等价物。
function foo(a)
{
console.log("foo" + a);
}
foo("bar"); // prints "foobar"
window.foo("bar2"); // prints "foobar2"
window['foo']("bar3"); // prints "foobar3"
这是因为如果未定义局部变量window.foo
,浏览器将假设您正在调用foo
。 window['foo']
是一种调用window.foo
的相同方式;它访问window
对象,但使用字符串。因此,考虑到这一点,我们可以完成您的变量函数调用。
window.KEY_CODE = 'somevalue';
window.func_somevalue = function(a) {
console.log("somevalue = " + a);
};
window.func_othervalue = function(a) {
console.log("othervalue = " + a);
}
// prints "somevalue = Hello."
window['func_' + window.KEY_CODE]("Hello.");
您可以使用其他对象执行此操作。
window.KEY_CODE = 'somevalue';
(function(window, document, $, undefined) {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
var keys = {
'somevalue' : function(a) { console.log(a); },
'othervalue' : function() { console.log('other'); }
};
keys[window.KEY_CODE]("Hello.");
})(window, window.document, window.jQuery);