当前位置: 移动技术网 > IT编程>网页制作>CSS > JS变量的作用域

JS变量的作用域

2018年11月27日  | 移动技术网IT编程  | 我要评论

js变量的作用域

1.1复制基本类型(undefined、null、boolean、number、string --- 按值访问)

var num1 = 5;
var num2 = num1;
console.log(num1);//5
console.log(num2);//5

其中num1=5,num2=5。但是num2的5只是一个副本,两者不会相互影响。

var num1 = 5;
var num2 = num1;
num1 = 3;
console.log(num1);//3
console.log(num2);//5

1.2复制对象

var obj1 = {};
var obj2 = obj1 ;
obj1.name = "mike";

console.log(obj1.name);//mike
console.log(obj2.name);//mike

obj2指针是obj1指针的副本,但俩指针指向同一对象(对象保存在堆内存中、指针在栈内存中)

2:传参

无论是基本类型和引用类型,都是传值

2.1:基本类型

function addone(num){
    num++;
    return num;
}

var count = 1;
var result = addone(count);
console.log(count);//1
console.log(result);//2

2.2 对象

eg1:

function setname(obj){
    obj.name = "mike";
}

var obj = {};
setname(obj);
console.log(obj.name);//mike

eg2:

function setname(obj){
    obj.name = "mike";
    obj = {};//局部对象
    obj.name = "tom";
}

var obj = {};
setname(obj);
console.log(obj.name);//mike

若是传引用,obj.name应该输出tom

3:作用域

part1:

var color = "blue";

function changecoler(){
    

    var anothercolor = "red";
    
    function swap(){
        var temp = anothercolor;
        anothercolor = color;
        color = temp;
        //这里可以访问color、anothercolor和temp
    }

    //这里可以访问color和anothercolor

    swap();
}

//这里只能访问color

changecolor();

包含全局变量color,changecolor局部环境中的anothercolor、swap()环境中的temp。

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数(会先在自己的变量对象中搜索变量和函数名,如果搜索不到再搜索上一级作用域链)。

part2:没有块级作用域(var)

if(true){
    var color = "blue";
}
console.log(color);//blue

如果是java、c,color会在if语句之后销毁。但在javascript中,在if语句中的变量声明会将变量添加到当前的执行环境(这里指全局)

for(var i = 0;i<10;i++){
    dosomething(i);
}

console.log(i);//10

对于javascript来说,for语句所创建的变量i即使在for循环执行结束后,也依然会存在于循环外部的执行环境中。

若用let:

for(let i = 0;i<10;i++){
    dosomething(i);
}

console.log(i);//uncaught referenceerror: i is not defined

part3:

function add(a,b){
    var sum = a+b;//局部变量sum函数外部访问不到
    return sum;
}

var result = add(1,2);
console.log(result);//3
console.log(sum);//uncaught referenceerror: sum is not defined
function add(a,b){
    sum = a+b;
    return sum;
}

var result = add(1,2);
console.log(result);//3
console.log(sum);//3

去掉var声明后,添加到全局环境中的变量sum将继续存在,即使函数已经执行完毕,后面的代码依然可以访问。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网