关于变量提升

代码

    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,具体内容谷歌。