首页 > 试题广场 >

请给出这段代码的运行结果 var a = 1; &nb

[单选题]
请给出这段代码的运行结果
var a = 1;
    function fn(a) {
    a = 2;
    alert(a);
    };
    fn(a);
    alert(a);

  • 1 1
  • 1 2
  • 2 1
  • 2 2
715头像 715
不要被参数a迷惑了,我觉得把代码换成以下形式你就看的懂了; var a = 1; function fn(num){ num = 2; console.log(num); } fn(a); console.log(a); 在操作变量的时候,会优先操作自己内部的变量。如果没有,那再去外层里找
发表于 2021-08-23 15:02:35 回复(2)
var声明的全局变量相当于window.xxx。变量提升先于函数提升,函数内没有关键字直接声明变量相当于window.a。先执行函数的window.a为2,执行完之后window.a赋值为1。真实执行的代码其实是这个 var a; //window.a = undefined     function fn(1) {     window.a = 2;     alert(a); // 函数体本身没有变量a去全局找 a = 2     }; window.a = 1     fn(1);     alert(a); // 1
发表于 2021-08-29 22:04:32 回复(0)
上边好多人给的答案都不对,答主715的答案是对的,这题并不是考察声明提升顺序的,而是考察作用域的,,a = 2并没有修改全局变量a,函数内的形参会隐式初始化一个变量,函数执行的时候先查找当前函数作用域是否有a,而当前函数作用域有形参a,所以不会去修改全局那个变量a
var a = 1;
function fn(a) {
  a = 2; // 这个a = 2修改的是形参a,并不是全局的a
  alert(a);
}
fn(a); alert(a);
如果fn是下边这样没有这个形参a,执行的时候在当前函数作用域找不到a的话才会去外层找到全局作用域的a从而修改全局变量a,而这样的输出结果会是2,2,绝不是2,1
function fn() {
    a = 2; // 这个a = 2才是修改了全局变量a
    alert(a);
  }




  
编辑于 2022-02-10 19:13:49 回复(1)
    function fn(a) {     window.a = 2;     alert(a);     }; var a a=1     fn(a);     alert(a);
发表于 2021-07-19 00:44:01 回复(2)