JS中不存在块级作用域
2015-03-26 22:54
225 查看
与C C++ JAVA不同,Javascript中没有块级作用域,函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。如以下例子中,i,j,k的作用域是相同的,它们三个在整个函数体中都有定义:
注意 “有定义”和”初始化“的区别:
以上函数和下面等价:
这就是javascript提前声明的特性。虽然局部变量在整个函数体内都是有定义的,但是在执行var之前,它是不会初始化的。
这个例子说明了为什么将所有的变量声明集中起来放置在函数的开头是一个好的编程习惯。
function test(o){ var i = 0; //i在整个函数体内都有定义 if(typeof o == 'object'){ var j = 0; //j也是,不仅在括号内 for(var k = 0;k < 10;k++){ //k也是,不仅在循环内部 document.write(k); } document.write(k); //k 仍有定义 输出10 } document.write(j); // j也有定义 }
注意 “有定义”和”初始化“的区别:
var a = 'global'; function demo(){ console.log(a); // undefined 而不是global var a = 'local'; //变量在此初始化,但到处都有定义 console.log(a); //local } demo();
以上函数和下面等价:
var a = 'global'; function demo(){ var a; //局部变量在函数开头声明 console.log(a); //此处该变量有定义,但未初始化(赋值),仍为undefined a = 'local'; //初始化赋值 console.log(a); //local } demo();
这就是javascript提前声明的特性。虽然局部变量在整个函数体内都是有定义的,但是在执行var之前,它是不会初始化的。
这个例子说明了为什么将所有的变量声明集中起来放置在函数的开头是一个好的编程习惯。
相关文章推荐
- JS作用域与块级作用域
- js没有块级作用域
- tips:js没有块级作用域。
- JS作用域与块级作用域
- 【学习笔记六】 - js中 创建对象的模式与继承 及 js中实现块级作用域和函数私有变量 《js高程》6-7笔记
- JS之 函数模仿块级作用域,私有变量,模块模式
- JS 模仿块级作用域
- js没有块级作用域但有函数作用域
- 一个经典的js中关于块级作用域和声明提升的问题
- JS中的块级作用域,var、let、const三者的区别
- javascript中不存在块级作用域,所以要小心使用在块级作用域中的函数声明所带来的作用域混乱.
- 【JS】垃圾回收和块级作用域
- JS作用域与块级作用域
- JS作用域与块级作用域
- JS之块级作用域
- js闭包实现块级作用域和私有变量的访问
- js变量没有块级作用域一说
- JS 无块级作用域
- js中模仿块级作用域
- 2017-03-21-js-js没有块级作用域