Javascript 变量、函数的声明

javascript变量

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

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

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

 

变量和函数的声明

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

变量的声明
    变量的声明只有一种方式,就是用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(){} 直接建立spa

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

 

(2)new Function 构建函数建立code

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的函数。
若是变量名和函数名声明相同,函数优先声明blog

alert(x); // function
var x = 10;
alert(x); // 10
x = 20;
function x() {};
alert(x); // 20
相关文章
相关标签/搜索