JavaScript权威计划–JavaScript变量,作用域,声明提前(简要学习笔记四)

1.宿主对象与宿主环境

宿主对象:由ECMAScript实现的宿主环境提供的目标,可以理解吧:浏览器提供的靶子。所有的BOM和DOM都是宿主对象。

 

宿主环境:一般宿主环境由外壳程序创建及维护,只要能提供js引擎执行的环境还可叫外壳程序。如:web浏览器等。

 

2.日期之易

var  now =new Date();
typeof(now+1)    //string
typeof(now-1)    //number
now==now.toString();    //true
now>(now-1)    //true    '>'将日期转换为数字

 

3.变量的声明

var
i;

var
sum;

或者

var
i,sum;

这些没有赋初始值的对象,初始值就是undefined

 

4.每当函数体内,局部变量的先级高于同名的全局变量。并且同名局部变量会窜(覆盖)全局同名变量的价值。

var a="glo";
function check(){
    var a="ble";
    return a;
}
check();    //ble

 

5.函数作用域与声明提前

解析一个事例,如下:

var scp="glob";
function f(){                
    console.log(scp);    //输出"undefined",而不是"glob"
    var scp="loca";        //在这里初始化
    console.log(scp);    //输出"loca"
}

理解:莫不您看怎么第一独出口是”undefined”,你可能当应该出口”glob”。因为scp上面定义之是全局变量啊。

全局变量在js中之另地方都是自作用的,为什么这里出问题了吧?

第一,正使第四沾所说。全局变量scp与局部变量scp同名,所以有的变量scp覆盖全局变量scp.

接下来,你还要纳闷,代码当时无是单独是履行到第一只输出语句么,还并未实施及脚的var
scp=”loca”么?这时我们设知道某些。

js的函数作用域是负于函数内声明的备变量在部数体内部是可见的!

碰巧使这事例,函数内部定义之scp无论是在var
scp=”loca”上面还是在底下。是都在的!

而你无信仰,你可以这样测试一下:

<script >
a();
function d(){
    console.log(b);
}
</script>

 

 

ECMAScript 1

 

 

使b没有的话,显示的远非给定义而休是出口”undefined”。

咱地方说罢函数声明后不曾赋初始值,默认其初始值就是”undefined”。

可见f()函数内部 scp
是存在的。只是没有初始化。直到后面初始化”loca”。

骨子里上面的事例真是的状相应是这样:

var scp="glob";
function f(){ 
     var scp ;             
    console.log(scp);    //输出"undefined",而不是"glob"
    var scp="loca";        //在这里初始化
    console.log(scp);    //输出"loca"
}

scp
这种情况吗于“声称提前”。

 

下这种状况稍微意思!

var a=1;
function b(){
  a=2;
  return;
  function a(){}      
}
//调用
b();
console.log(a)    //a=1