作用域决定了变量的可访问性(可见性)。

JavaScript函数的作用域

JavaScript中,有两种作用域类型:
  • 本地(局部)作用域
  • 全局作用域
在JavaScript中,每创建一个函数都是创建了一个新的作用域。 而作用域决定了其函数内外各种变量的可访问性(可见性)。 定义在函数内的变量,无法在函数外面被访问。 而函数外面定义的变量,可以在函数内被访问么?继续。
局部变量
定义在函数内的变量即为局部变量。作用于本地域。只能在函数内被访问,操作。
// 这里不可以用carName
function myFunction() {
    var carName = "Volvo";
    // 这里可以用carName
}
由于局部变量只作用于函数内,所以在多个函数内可以使用同样的变量名。局部变量在函数开始执行的时候被创建,在函数执行完毕后被删除。
全局变量
定义在函数外面的变量,具有全局特性。作用于全局,网页当中的所有脚本及函数都可以去访问它。
var carName = "Volvo";
// 这里可以用carName
function myFunction() {    
    // 这里也可以用carName
}
JavaScript变量
JavaScript中,对象和函数都可以是变量。 作用域决定了变量、对象及函数在各部分代码中的可访问性,可操作性。

自动全局化

如果,您对未声明的变量进行赋值,这个变量将会自动成为全局变量。 看下面的例子:
function myFunction() {    
    carName = "Volvo"; // 定义了全局变量,并进行了赋值操作
}
这个代码示例,声明了一个全局变量carName,即使该值是在一个函数内部赋值的。
Strict Mode(严格模式)
所有的现代浏览器都支持变量在严格模式下运行。例如,我们在函数的第一行加入:use strict,就可以让代码在严格模式下运行。
function myFunction() {    
   "use strict";
   // 更多代码
}
"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式。 "use strict" 的目的是指定代码在严格条件下执行。 严格模式下你不能使用未声明的变量。
为什么使用严格模式:
  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向。 一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。 更多关于严格模式的内容在之后的课程中介绍。
全局变量在HTML中
在HTML中,全局变量是一个window对象,所有的全局变量都归window对象所有。
var carName = "Volvo";
// 这里的代码可以用window.carName的方式
警告!
不到万不得已,不要创建全局变量。除非你已经准备好了。因为,你创建的全局变量或者函数会与window变量或者函数冲突。window要比document级别高。对于新手来讲全局变量不好把控。
Javascript变量的生命周期
Javascript变量在函数执行时被创建,函数执行完毕后被删除。在浏览器中,全局变量是在你关闭浏览器窗口或者浏览器标签的时候被删除。但是当你在当前窗口中打开新的一个页面时,该全局变量依然可用。就是说,X站里有一个全局变量,当前窗口打开Y站时,Y站依然可以用该全局变量。是不是有点...>_>