我有以下Javascript文件:
>>> images = sorted(set(sum([['%s_image#%i' % (nm, random.randint(1,9)) for i in range(random.randint(2,5))] for nm in 'car bike cat dog man tree'.split()], [])))
>>> print('\n'.join(images))
bike_image#2
bike_image#3
bike_image#4
bike_image#5
car_image#2
car_image#7
cat_image#3
dog_image#2
dog_image#5
dog_image#9
man_image#1
man_image#2
man_image#4
man_image#6
man_image#7
tree_image#3
tree_image#4
>>> from collections import defaultdict
>>> image2max = defaultdict(int)
>>> for image in images:
name, _, version = image.partition('#')
version = int(version)
if version > image2max[name]:
image2max[name] = version
>>> # Max version
>>> for image in sorted(image2max):
print('%s#%i' % (image, image2max[image]))
bike_image#5
car_image#7
cat_image#3
dog_image#9
man_image#7
tree_image#4
>>>
,名为utils.js,位于相对于我的HTML文件的function availableHeight() {
var windowHeight = window.innerHeight;
var headerHeight = $(".page-header").innerHeight();
var marginPaddingEtc = 105;
return windowHeight - marginPaddingEtc - headerHeight;
}
function setMapHeight() {
availableHeight = availableHeight();
$("#map").outerHeight(availableHeight);
}
文件夹中。在HTML文件中,我导入js/
,如:
utils.js
并使用<script type="text/javascript" src="js/utils.js"></script>
末尾的函数,如:
body
在Firefox 44.0.2中打开页面时,我在控制台中获得以下输出:
<script>
$(document).ready(function () {
$("#menu").load("demo_nav.html", function() {
setMapHeight();
var availableHeight = availableHeight();
console.log(availableHeight);
});
});
</script>
最令我惊讶的是找到了setMapHeight()并且availableHeight()不是这样,即使它们在同一个文件中!由于找到了一个,我知道问题不在于导入。我在$(document).ready()中调用函数,所以一切都应该被加载。我尝试重命名var,以防声明替换函数,但这也没有解决它。
我不知道为什么这不起作用。你能找到什么问题吗?
编辑:Dmitriy Loskutov的回答 TypeError: availableHeight is not a function
var availableHeight = availableHeight();
正在重新定义全局名称,因为它没有使用setMapHeight()
声明其变量。我把它改成了
var
并且错误消失了。
由于
答案 0 :(得分:2)
本地tbl_
变量被提升到其功能的顶部,遮蔽了全局变量。
在指定某个值之前,它具有默认的availableHeight
值。但是undefined
不是函数,所以你不能称之为。
您的代码变得像
undefined