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
var obj1 = {}; var obj2 = obj1 ; obj1.name = "mike"; console.log(obj1.name);//mike console.log(obj2.name);//mike
obj2指针是obj1指针的副本,但俩指针指向同一对象(对象保存在堆内存中、指针在栈内存中)
无论是基本类型和引用类型,都是传值
function addone(num){ num++; return num; } var count = 1; var result = addone(count); console.log(count);//1 console.log(result);//2
function setname(obj){ obj.name = "mike"; } var obj = {}; setname(obj); console.log(obj.name);//mike
function setname(obj){ obj.name = "mike"; obj = {};//局部对象 obj.name = "tom"; } var obj = {}; setname(obj); console.log(obj.name);//mike
若是传引用,obj.name应该输出tom
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。
内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数(会先在自己的变量对象中搜索变量和函数名,如果搜索不到再搜索上一级作用域链)。
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
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将继续存在,即使函数已经执行完毕,后面的代码依然可以访问。
如对本文有疑问, 点击进行留言回复!!
清除新版Google Chrome浏览器中表单控件(input,button...)默认的黑色边框
荐 20200714——git/mac配置/项目运行步骤/一些报错
antd 菜单组件 使用时报错:Cannot read property ‘isRootMenu‘ of undefined
CSS|div的style=“background-image: url(img/a.bmp)图片显示不出来
硬件仪表盘账号建立指导(一) --WHQL认证测试结果提交账号(一)
cookie的规范Cookie的不可跨域名性或Cookie与域名的关系
网友评论