背景:
根据某些任务的需要,我需要一个简单的排序功能.为简单起见,我编写了另一个函数来将内置排序函数包装为:
function sortBy(obj, extra, func){
if(typeof func == 'function'){
f = func;
} else if(typeof extra != 'function'){
eval('function f(a, b, ai, bi, e){return ' + func + '}');
} else {
var f = extra;
extra = null;
}
var res = [];
for(var i in obj){
if(obj.hasOwnProperty(i)){
obj[i]._k_ = i;
res.push(obj[i]);
}
}
res.sort(function(a, b){
if(f(a, b, a._k_, b._k_, extra)){
return 1;
} else {
return -1;
}
})
return res;
}
Run Code Online (Sandbox Code Playgroud)
我的尝试是:
例如, …
当我试图启用lib(Beard.js)来支持javascript模板引擎Haml时,出现了一个非常奇怪的问题.
Haml无法正确加载.我查了下代码,发现Haml从未被加载到页面中.经过大量的尝试和失败,我碰巧使它成功.我发现的奇怪之处是:
在起源Haml lib中,它是:
var Haml;
(function(){
...
Haml = function(){ ... }
...
}());
Run Code Online (Sandbox Code Playgroud)
我将代码更改为:
var Haml;
(function(){
...
window.Haml = function(){ ... }
...
}());
Run Code Online (Sandbox Code Playgroud)
然后它的工作..
为什么???Haml是否应该在全球范围内自动识别?
环境 - IE8
Haml.js - https://github.com/creationix/haml-js
Bear.js - https://github.com/jspopisno1/Beard
--------------更新---------------
在Haml.js中,它是:
var Haml;
(function(){
...
Haml = function Haml(){ ... }
...
}());
Run Code Online (Sandbox Code Playgroud)
我想在javascript中,语句"function Haml(){}"使Haml成为局部变量.但是,为什么Haml可以在Firefox和Chrome中正确加载????