变量的作用域

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

全局(global)变量的作用域(scope)是全局性的,即在JavaScript代码中,它处处都有定义。
    而在函数之内声明的变量,就只在函数体内部有定义,它们是局部(local)变量,作用域是局部性的。
    函数的参数也是局部变量,它们只在函数体内部有定义。
    在函数体内部,局部变量的优先级比同名的局部变量高。
    
    如果给一个局部变量或函数的参数声明的名字与某个全局变量的名字相同,那么就有效地隐藏了这个全局变量。

例如,下面的代码将输出单词"local scope":
        var scope = 'global scope';     // Declare global variable
            function checkScope() {
                var scope = 'local scope';     // Declare a local variable with the same name
                document.write(scope);        // Use the local variable. not the global one
            }
            
            checkScope(); // Prints "local"
    注意:在全局作用域中编写代码是可以不使用var语句,但是在声明局部变量时,一定要使用var语句。
    
    没有块级作用域
    JavaScript没有块级作用域,函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有
    定义的。
    
    下面代码中,变量i、j和k的作用域是相同的,它们三个在整个函数体中有定义。
        funtion test(o) {
            var i = 0;         // i is defined throughout function
            if(typeof o == "object") { // if block
                var j = 0;    // j is defined everywhere, not just block
                for(var k = 0; k < 10; k++) { // k is everywhere, not just loop
                    document.write(k);    // k is still defined: prints 10
                }
            }
            document.write(j);    // j is defined, but may not be initialized
        }
        
        // Example-2
        
        var scope = 'global';    
        function f() {
            alert(scope);    // Displayed "undefine", not "global"
            var scope = "local";    // Variable initialized here, but defined everywhere
            alert(scope);    // Displays "local"
        }
        //由于这个作用域规则的限制,第一个alert输出的并不是"global"。
        //局部变量在整个函数体内都是有定义的,这就意味着在整个函数体中都隐藏了同名的全局变量。
        //虽然局部变量在整个函数体中都是有定义的,但是在执行var语句之前,它是不会被初始化的。
        因此上面的例子中,函数f和下面的函数等价:
        
        function f() {
            var scope;    // 局部变量在函数开头声明
            alert(scope);    // 此处该变量有定义,但值仍为"undefined"
            scope = 'local';     // 现在初始化该变量,并给它赋值
            alert(scope);    //此处该变量具有值
        }
        //这个例子说明了为什么将所有的变量声明集中起来放置在函数的开头是一个好的编程习惯。

以下内容来自:

        http://www.cnblogs.com/wangfupeng1988/p/3986420.html

        http://www.cnblogs.com/wangfupeng1988/p/ 

Code 1:

console.log(a);   // variable a is undeclared and this will occure error reporting

Code 2:

console.log(a);   // undefined , declare a variable in JavaScript and not assign a value. Then the variable's default value is undefined.

var a;

Code 3:

console.log(a);  // undefied

var a = 10;

Code 4:

console.log(this);  // 这里输出将会是window对象,window对象是一个全局的对象

Code 5:

console.log(f1);  // function f1(){ }

function f1() { }; // 声明函数

Code 6:

console.log(f2) ;  // undefined

var f2 = function f2() { }; // 函数表达式,这种方式产生的效果和变量的声明并赋值一样

注意: 学过C、Java都知道,在使用一个变量之前必须要先声明数据类型,如: int a; 

同时,在声明变量的同时也可以初始化赋值,如: int a = 1001;

但是在程序的执行过程之中, 是先进行类型的声明的预处理,然后就是执行赋值,"="是赋值操作符。

 

[label][JavaScript][The Defined Guide of JavaScript] 变量的作用域的更多相关文章

  1. [label][JavaScript][The Defined Guide of JavaScript] 如何声明变量

    因为觉得我自己的JavaScript基础很不扎实,或者可以说根本就没有所谓基础,所以就最近一直在看<The Defined Guide of JavaScript> . 在一边看的同时,我 ...

  2. JavaScript学习笔记(八)——变量的作用域与解构赋值

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  3. 精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型

    变量.作用域和内存问题 执行环境共有两种类型——全局和局部 作用域链会加长,有两种情况:try-catch语句的catch块,with语句. javascript没有块级作用域,即在if,for循环中 ...

  4. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  5. JavaScript基础笔记(二)变量、作用域和内存问题

    变量.作用域和内存问题 一.基本类型和引用类型的值 基本类型值:简单的数据段 引用类型值:由多个值构成的对象 基本类型是按值访问的,引用类型是按引用访问的. 不能给基本类型的值添加属性,尽管不会报错. ...

  6. javascript高级程序设计第四章 变量、作用域和内存问题

    变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象  引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...

  7. 【追寻javascript高手之路02】变量、作用域知多少?

    前言 本来想把这个与上篇博客写到一起的,但是考虑到是两个知识点还是分开算了,于是我们继续今天的学习吧. 基本类型与引用类型 ECMAScript的的变量有两种类型: 基本类型(值类型):简单数据段 引 ...

  8. 《JavaScript高级程序设计》读书笔记 ---变量、作用域和内存问题小结

    JavaScript 变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Boolean.Number 和String.基本类型值 ...

  9. 《JavaScript高级程序设计》笔记:变量、作用域和内存问题(四)

    基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象. 动态的属性 var p ...

随机推荐

  1. 汇编_指令_INC

    加1指令 INC指令功能:目标操作数+1 INC指令只有1个操作数,它将指定的操作数的内容加1,再将结果送回到该操作数.INC指令将影响SF,AF,ZF,PF,OF标志位,但是不影响CF标志位. IN ...

  2. 学习笔记之C++入门到精通(名师教学·手把手教会)【职坐标】_腾讯课堂

    C++入门到精通(名师教学·手把手教会)[职坐标]_腾讯课堂 https://ke.qq.com/course/101465#term_id=100105503 https://github.com/ ...

  3. 如何制作行政区划矢量图(shp格式)

    详细图文ArcGIS10.2破解版教程地址:http://jingyan.baidu.com/article/e73e26c0cb5c1324adb6a791.html 有时候想要一张shp格式的地方 ...

  4. 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  5. word2vec相关

    word '\xe8\xb6\x85\xe8\x87\xaa\xe7\x84\xb6\xe7\x8e\xb0\xe8\xb1\xa1' not in vocabulary 分词后的样本格式:英雄联盟, ...

  6. Oracle Lock(Enqueues)

    转载:http://www.cnblogs.com/Richardzhu/articles/2796540.html 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多 ...

  7. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

  8. kettle——入门操作-行列转换(行转列,字段拆分)

      1.Row Normaliser,将一行多列数据转换为多行一列数据. 输入数据流: 计算器配置如下: 与计算器相连接的excel输出如下: Row Normaliser,设置如下, 与Row No ...

  9. mysql java.sql.SQLException: Can't call commit when autocommit=true

    java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLEx ...

  10. windows 下 YII2 配置 memcache

    环境: 操作系统 :Windows 7; php: 5.6.8 apche:2.4.12 1.首先安装PHP  memcache 拓展,安装方法如下: 1.1下载 memcache 拓展DLL: ht ...