js变量提升,共享传值
关于变量提升
代码
var UserName = 'Tristana';
(function(){
console.log(UserName);
var UserName
})();
// undefined, 并没有出现 Tristana
上面代码等价于
var UserName = 'Tristana';
(function(){
var UserName
console.log(UserName);
})();
// undefined, 并没有出现 Tristana
JS运行中,会先查找作用域中的变量,并放到前面来,这对于函数也是有效的,只不过这个特征在其他语言里都有,并没有注意。
foo();
function foo(){
console.log("foo");
}
变量
var a = 'A'
b();
function b(){
var a = 'a';
log();
}
function log(){
console.log(a);
}
// 输出A,函数内变量的值与定义函数位置有关,与调用位置无关
引用传值
这是之前遇到过的,js并没有指针的概念,下面栗子却会误以为有传递的是指针
//栗子 1
var man = {
name:"jhin",
age:25
}
function foo(obj){
obj.age += 10;
}
foo(man);
console.log(man.age);
//栗子 2
var arr = ['Riven','Yasuo']
function foo2(obj){
obj[1]='jhin'
}
foo2(arr);
console.log(arr);
//输出 [ 'Riven', 'jhin' ]
//栗子 3
var a,b,c
function foo3(v1,v2,v3){
v1 = 'str'
v2 = 25
v3 = false
}
foo3(a,b,c);
console.log(a,b,c);
// 输出 undefined undefined undefined
// 栗子 4
var man2 = {
name:"jhin",
age:25
}
function foo4(obj){
obj = 'obj'
}
foo4(man2);
console.log(man2.age);
// 输出 25
第一个例子和第二个,对象发生变化,第三第四却没有,这涉及到一个概念:Call-by-sharing,具体内容谷歌。