函数作用域 在javaScript中是没有块级作用域的,代替的是函数作用域,这个与传统的java语言和我熟悉的actionScript是不同的。 function test(o){
函数作用域
在javaScript中是没有块级作用域的,代替的是函数作用域,这个与传统的java语言和我熟悉的actionScript是不同的。
function test(o){ if(typeof o == "object"){ var j = 1; for(var k=0; k<10; k++){ console.log(k); } console.log(k); // 10 } console.log(j); // 1 } test({key:1});
传统的块级作用域,当声明变量k,那么k在for循环中是有效的,离开for循环是没有定义的,但是在javaScript中,输出了10,证明k无论在函数体内部任何位置声明,都是可以保存记录的。
变量声明提前
在javaScript中,在一个函数内部的内部变量,无论在函数内部哪里声明,都会立刻生效,影响了整体函数的内部变量。当然这回带来困扰,让代码产生歧义,最好的做法是在函数内部开始处进行声明,避免与全局变量的冲突,因为在函数内部,内部变量是优先执行的,忽略全局变量。
var scope = "global"; function f(){ console.log(scope); // undefined var scope = "local"; console.log(scope); // local } f();
上面的例子说明内部变量取代全局变量,并且变量声明提前,对阅读代码和程序执行造成了困扰。
var scope = "global"; function f(){ console.log(scope); // global } f();
内部变量不声明,全局变量被引用,正确输出引用的定义。
通过学习javaScript最大的感受就是要理解并记住与传统语言的编程运行差异,当然传统语言更好的编程习惯将保证你的代码更健壮,但是了解差异将帮助你更深入的理解javaScript并写出更好的前端代码。