window 对象
JavaScript 有一个全局对象,那就是 window,这个对象能够绑定你所有的自定义变量、函数,包括系统默认的函数,比如 alert(),下面简单看一下 window 的功能(本文的 window 仅作为全局对象,对于 BOM 中的 window 不做介绍)
function func8(){
console.log("Hello world!");
}
var new_func8 = window.func4;
new_func8(); //输出 Hello world!
可以看到我们自定义的函数直接被赋值给 new_func4,以后我们使用 new_func4 相当于使用 func4(),再比如:
window.alert = function () {
console.log("I'am alert function!");
}
alert(); //I'am alert function!
我们直接把系统函数 alert() 给干掉了!
由于 window 可以代表我们任何的变量,所以很容易造成冲突。比如两个程序猿同时写了两个一样名称的函数,都用 window 绑定,那最终结合的时候,请问 window 该调用哪个函数呢?
//第一个 JS 文件
function func9() {
console.log("Hello Python!");
}
//第二个 JS 文件
function func9() {
console.log("Hello Java!");
}
<!-- 测试用的 HTML 文件 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数</title>
<script src="JS/function.js"></script>
<script src="JS/function2.js"></script>
<script>
window.func9();
</script>
</head>
<body>
</body>
</html>
控制台输出:
输出完全看程序的心情(当然不会报错哈,JavaScript 还能报错那你写的代码得多离谱!)
为了避免这种迷惑行为,我们强烈推荐使用自定义的全局变量!
var MyWindow = []; //定义一个全局变量(写在函数外,并用 var 声明的就是全局变量,不要忘了哦)
//以后将本文件所有的函数、变量都绑定到 MyWindow 上面
MyWindow.func10 = function () {
console.log("I'am func1");
}
//将变量绑定到我们自定义的全局对象中
MyWindow.name = "Mike";