// 使用var两次声明同一变量(不会报错) var name = '张三'; var name = '李四'; // 使用var声明变量但不指定值(默认值为undefined) var gender; console.log('[LOG-1] typeof name is', typeof name); // [LOG-1] typeof name is string console.log('[LOG-2] typeof gender is', typeof gender); // [LOG-2] typeof gender is undefined var name; console.log('[LOG-3] typeof name is', typeof name); // [LOG-3] typeof name is string console.log('[LOG-4] name is', name); // [LOG-4] name is 李四 function foo() { console.log('[LOG-5] name is', name); } foo(); // [LOG-5] name is 李四 for (var num = 9527; num > 0; num--) { var language = 'PHP是世界上最好の语言'; break; } console.log('[LOG-6] num is', num); // [LOG-6] num is 9527 console.log('[LOG-7] language is', language); // [LOG-7] language is PHP是世界上最好の语言 //========== 总结 ==========// // 1、var的作用域是函数作用域,即变量只在声明它的函数内部可见。 // 2、在同一个作用域内,可以使用var重复声明同名变量。 // 3、使用var声明变量时若不指定值则默认值为undefined。
let name1 = '张三'; // let name1 = '张三'; // Uncaught SyntaxError: Identifier 'name1' has already been declared if (true) { // 变量name2只能在当前代码块中使用 let name2 = '李四'; console.log('[LOG-1] typeof name2 is', typeof name2); // [LOG-1] typeof name2 is string } console.log('[LOG-2] typeof name1 is', typeof name1); // [LOG-2] typeof name1 is string console.log('[LOG-3] typeof name2 is', typeof name2); // [LOG-3] typeof name2 is undefined // 在for循环的圆括号里声明的变量num只能在循环体内使用 for (let num = 9527; num > 0; num--) { console.log('[LOG-4] num is', num); // [LOG-4] num is 9527 let language = 'PHP是世界上最好の语言'; // 这里再次使用let声明变量name1,其作用域是当前for循环内 let name1 = '王五'; console.log('[LOG-5] name1 is', name1); // [LOG-5] name1 is 王五 break; } console.log('[LOG-6] name1 is', name1); // [LOG-6] name1 is 张三 console.log('[LOG-7] typeof num is', typeof num); // [LOG-7] typeof num is undefined console.log('[LOG-8] typeof language is', typeof language); // [LOG-8] typeof language is undefined //========== 总结 ==========// // 1、let的作用域是块作用域,即变量只在声明它的{}内部可见,值得一提的是在for循环的圆括号里声明的变量只在循环体内可见。 // 2、在同一个作用域内,不能使用let重复声明同名变量,但是不同作用域内可以使用let重复声明同名变量。
const NAME = '张三'; // NAME = '李四'; // Uncaught TypeError: Assignment to constant variable. console.log('[LOG-1] NAME is', NAME); // [LOG-1] NAME is 张三 if (true) { const NAME = '李四'; console.log('[LOG-2] NAME is', NAME); // [LOG-2] NAME is 李四 } console.log('[LOG-3] NAME is', NAME); // [LOG-3] NAME is 张三 //========== 总结 ==========// // 1、const其实就是声明常量的关键字,且必须声明时就赋值,不能声明和赋值分开操作。 // 2、JavaScript的const和PHP的const在语法上完全一样,但是千万不要想当然地认为其作用域也是全局,事实上const和let一样都是块作用域, // 在同一个作用域内不能重复声明,但不同作用域内可以重复声明同名常量(可参考上面的代码)。
Copyright © 2024 码农人生. All Rights Reserved