JavaScript变量作用域

水深无声 2022-07-03 12:21 367阅读 0赞

变量作用域是程序中定义这个变量的区域。

先贴一段代码,如果读者对代码的输出并不感到困惑就不用往下面读了。

  1. /* 代码1 */
  2. var scope = "global ";
  3. function checkScope() {
  4. var scope = "local ";
  5. function childCheck() {
  6. var scope = "childLocal ";
  7. document.write(scope);
  8. }
  9. function childUndefined() {
  10. document.write(scope);
  11. var scope;
  12. }
  13. function childOverride() {
  14. scope = "childOverride ";
  15. document.write(scope);
  16. }
  17. document.write(scope); //输出"local"
  18. childCheck(); //输出"childLocal"
  19. childUndefined(); //输出"undefined"
  20. childOverride(); //输出"childOverride"
  21. document.write(scope); //输出"childOverride"
  22. }
  23. checkScope(); //输出"local childLocal undefined childOverride childOverride"
  24. document.write(scope); //输出"global "

1、全局作用域与局部作用域
全局(global)变量的作用域是全局的,在Javascript中处处有定义;而函数内部声明的变量是局部(local)变量,其作用域是局部性的,只在函数体内部有定义。对于下面的输出读者应不会感到意外。

  1. /* 代码2 */
  2. var scope = "global";
  3. function checkScope() {
  4. var scope = "local";
  5. document.write(scope);
  6. }
  7. checkScope(); //输出"local"
  8. document.write(scope); //输出"global"

全局变量作用域中使用变量可以不用var语句,但在声明局部变量是一定要使用var语句,否则会视为对全局变量的引用。看下面代码:

  1. /* 代码3 */
  2. var scope = "global";
  3. function checkScope() {
  4. scope = "local";
  5. document.write(scope);
  6. }
  7. checkScope(); //输出"local"
  8. document.write(scope); //输出"local"

2、没有块作用域
JavaScript没有块级作用域,函数中声明的变量在整个函数中都是有定义的。对于下面的代码对于生疏的读者可能颇感意外:

  1. /* 代码4 */
  2. var scope = "global";
  3. function checkScope() {
  4. document.write(scope); //语句4.1
  5. var scope = "local"; //语句4.2
  6. document.write(scope);
  7. }
  8. checkScope(); //输出"undefinedlocal"

由于语句4.1(var scope = “local”;)声明的变量在整个checkScope函数作用域内都有效,因此在语句4.2(document.write(scope); )执行的时scope引用的是局部变量,而此时局部变量scope尚未定义,所以输出”undefined”。因此一个好的编程习惯是将所有的变量声明集中起来放在函数的开头
在了解了上述内容之后,读者再看看代码1应该不会感到困惑了。

3、对象的属性变量
对象的属性变量比较容易理解,看一下下面的代码读者应该不会感到疑惑。

  1. /* 代码5 */
  2. var scope = "global ";
  3. var obj = new Object();
  4. obj.scope = "object ";
  5. obj.checkScope = function () {
  6. var scope = "loacl ";
  7. document.write(scope); //输出"loacl"
  8. document.write(this.scope); //输出"object"
  9. document.write(window.scope); //输出"global"
  10. }
  11. obj.checkScope(); //输出"loacl object global"

本文转自:http://blog.csdn.net/kingwolfofsky/article/details/6581944

发表评论

表情:
评论列表 (有 0 条评论,367人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaScript-JS变量作用

    变量是有作用域的,也叫可见范围,在函数内部创建的变量只能在函数内部使用,外面是无法访问到的;但是在函数外部创建的变量,却可以渗透到函数内部,也就是说函数中可以访问外部的全局变

    相关 javaScript变量作用

    作用域是程序源代码中定义变量的区域。 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript采用词法作用域(lexical scopin

    相关 javascript变量作用

    基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型还是