我在阅读 typeahead.js documentation 时发现了这段代码:
var states = ['Alabama', 'Alaska'];
//... more code
var states = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
// `states` is an array of state names defined in "The Basics"
local: $.map(states, function(state) { return { value: state }; })
});
我不明白的是,为什么 Bloodhound
对象使用 states
数组,并且它不会与后面的 states
变量声明冲突?
我知道它 shouldn't work 除非它是 nested 。但似乎并非如此。
我做了自己的实验:
var a = 3;
var a = function(){ alert(a + 2); }
a();
输出:function(){ alert(a + 2); }2
这证明它不应该工作。
这是那些 javascript 特性之一吗?
最佳答案
您试图在变量 a 初始化为函数后访问它。 如果你尝试类似的东西,
var a = 10;
var a = {b: a+10}
你会看到a是,
{b: 20}
状态数组在被覆盖之前被访问。
关于javascript - 为什么在这种情况下两个同名变量不会发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735007/