函数作用域和块级作用域的区别

  • 块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块。

  • 函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的。

  • var是js的,作用域是函数作用域的,let是ES6的,作用域是块级作用域的。

// 函数作用域
function test (){
    console.log('函数内var声明的:', a); // 函数内var声明的: undefined
    var a = 'testa';
    console.log('函数内let声明的:', b); // 报错
    let b = 'testb'
}
console.log('函数外var声明的:', a); // 报错 a is not defined
test();

// 块作用域
if (true) {
    let c = 'testc';
    console.log('块作用域里面使用', d); // 块作用域里面使用 undefined
    var d = 'testd';
}
console.log('块作用域外面使用var', d); // 块作用域外面使用var testd
console.log('块作用域外面使用let', c); // 报错

通过上述例子可见

  • var定义的变量是受到函数作用域限制的,不受if{}块作用域的限制。在函数内声明前使用var变量只是打印出undefined,而在函数外使用却报错is not defined。而在if{}块作用域内声明前使用和在块内声明后块外使用,也只是打印出undefined,并不会报错

  • let定义的变量,是受块作用域的限制的。let定义的变量不管是在函数内声明前使用,还是函数内声明后函数外使用,及块内声明块外使用都报错is not defined

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容