zoukankan      html  css  js  c++  java
  • Javascript 变量、函数的声明

    javascript变量

    全局变量和局部变量
        按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量。全局变量的作用域是整个js文件,而局部变量的作用域是该变量被定义的函数内部,也包括在该函数内部定义的函数的内部。其实无论是全局变量还是局部变量,他们都是在其被创建的环境(比如函数)中,以及被创建的环境所包含的子环境(比如函数内部的函数)中有效。

    块作用域
        变量的作用域是基于函数的,而不是基于块的。在c++中,在花括号 { }中声明的变量,在花括号外不可见,这就是块作用域;而在javascript中,花括号内部声明的局部变量,在花括号外仍可见。

    function f1(){
       if(1){
          var a = 100;
       }
       alert(a);
    }
    f1(); // alert 100
    

    变量和函数的声明

        在javascript引擎解析javascript代码的时候,首先javascript引擎会把变量和函数的声明提前进行预解析,然后再去执行其他代码。

    变量的声明
        变量的声明只有一种方式,就是用var关键字声明,直接赋值不是一种声明方式!它仅仅是在全局对象上创建了新的属性(而不是变量)。
        var num = 1; 是在当前域中声明变量,如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。
        而num=1; 是对属性赋值的操作,首先,它会尝试在当前作用域链中解析num,如果在当前作用域链中找到num,则会执行对num属性赋值;如果没有找到num,它会在上一层作用域链中找.... 直到找到最上层的作用域,即全局作用域,此时它会在全局作用域中创造num属性并赋值。
        由于变量声明自带不可删除属性,比如var num=1 和 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,可以从全局变量中删除。
    声明和赋值的区别
    (1)声明会在解释器预解析js代码的时候被提前,而赋值不会。

    alert(a); // undefined ,被声明提前,但此刻未被赋值
    alert(b); // error "b" is not defined
    b = 10;
    var a = 20;
    

    (2)直接赋值形式是在执行阶段创建

    alert(a); // undefined
    b = 10;
    alert(b); // 10, 代码执行阶段创建
    
    var a = 20;
    alert(a); // 20, 代码执行阶段修改
    

    (3)变量不能被删除,属性可以

    a = 10;
    alert(window.a); // 10,是一个全局对象window的属性
    alert(delete a); // true
    alert(window.a); // undefined
    var b = 20;
    alert(window.b); // 20
    alert(delete b); // false
    alert(window.b); // 仍然为 20,因为变量是不能够删除的。
    

    函数声明
        函数声明有三种方式:
    (1)function name(){} 直接创建

    function add(a,b){
        return a+b;
    }
    add(5,4);
    

    (2)new Function 构建函数创建

    var add=new Function("a", "b", "return a+b;");
    add(4,5);
    

    (3)给变量赋值匿名函数方法创建

    var add = function(a,b){
        return a+b;
    }
    add(4,5);
    
     

    其中,第二种和第三种方法,在声明前访问时,返回的都是一个undefined的变量。在声明后访问他们都是一个function的函数。
    如果变量名和函数名声明相同,函数优先声明

    alert(x); // function
    var x = 10;
    alert(x); // 10
    x = 20;
    function x() {};
    alert(x); // 20
    
     
  • 相关阅读:
    分形之城
    【SDOI2011 第2轮 DAY1】消防 树上问题+二分+贪心
    【Usaco Nov08 Gold】玩具 三分+贪心
    分治 复习
    快读板子
    最小线段覆盖 C神奇项链
    比赛经验积累1
    字符串 专题
    界面小项目之W3C
    前端小基础
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/6501486.html
Copyright © 2011-2022 走看看