Javascript基础

来源:互联网 发布:软考程序员内容 编辑:程序博客网 时间:2024/05/22 14:38

1. Js没有块级作用域,只有函数作用域,函数是Js中唯一有自己作用域的数据结构。

例:

function test() {

for(var i; i<5; i++){

//块内

}

console.log(i)

}

test(); //结果输出 5,说明js没有块级作用域。

补充:如果想让Js拥有自己的块级作用域,可利用函数作用域的机制,改为:

function test() {

(function(){

for(var i; i<5; i++){

//块内

}

})();

console.log(i)

}

test();//结果为undifined,这时变量“i”的作用域在立即执行函数内,在出了自己的作用域后就被销毁,所以此时的log结果为undifined

2. Js在作用域内变量声明具有提升机制(hoisting)。

例:

<script>

var a = "hello";

(function(){

console.log(a);

var a = "world";

})();

</script>

//结果输出 undifined,因为在上面的立即执行函数的作用域内声明的“a”变量被提升到了自己作用域的顶部,相当于:

<script>

var a = "hello";

(function(){

var a;//变量提升

console.log(a);

a = "world";

})();

</script>

所以结果在函数内"a"变量的声明被提到了最前面,在复制前log,所以结果为undifined。

3. Js中没有用var声明的变量都是全局变量,而且是顶层对象的属性。

例:

function test (flag) {

if(flag){

s=''scope';

for(var i=0; i<2; i++){}

}

console.log(i)

}

test(true);

console.log(s);

//输出 2; "scope";   变量"s"声明的时候没有用var,所以为全局变量,用window.s也能获取到。