找不到外部文件的Javascript函数

时间:2016-03-11 20:41:51

标签: javascript html

我有以下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

并且错误消失了。

由于

1 个答案:

答案 0 :(得分:2)

本地tbl_变量被提升到其功能的顶部,遮蔽了全局变量。

在指定某个值之前,它具有默认的availableHeight值。但是undefined不是函数,所以你不能称之为。

您的代码变得像

undefined