我正在阅读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的特点之一吗?
答案 0 :(得分:1)
当该语句完成执行时,将重新分配该变量。在该语句中,变量仍具有旧值。这类似于a = a +1
。
答案 1 :(得分:1)
您尝试在将变量初始化为函数后访问变量a。 如果你尝试类似的东西,
var a = 10;
var a = {b: a+10}
你会看到a是,
{b: 20}
在重写之前访问states数组。