自学内容网 自学内容网

JS(一)变量与常量,作用域

JS(一)变量与常量,作用域

一变量与常量

  • 在JavaScript中,关于变量声明有三种方式:varletconst,它们之间有一些区别。

01 var

  • 存在变量提升的问题,即变量可以在声明之前被访问。
  • 没有块级作用域,只有全局作用域和函数作用域。
var num = 0;
console.log(num); // 输出: 0
var num; // 可以重复声明

02 let

  • 没有变量提升,存在暂时性死区,必须先声明后使用。
  • 具有块级作用域,只在块级作用域内有效。
let num = 0;
console.log(num); // 输出: 0
// console.log(num); // 报错,暂时性死区
// let num = 1; // 重复声明会报错
{
  let num = 1;
  console.log(num); // 输出: 1
}

03 const

  • 声明常量,一旦赋值就不能再修改。
  • 具有块级作用域,同样存在暂时性死区。
const num = 0;
// num = 1; // 尝试修改常量会报错
console.log(num); // 输出: 0
// const num; // 声明时必须赋值,否则报错
{
  const num = 1;
  console.log(num); // 输出: 1
}
  • 这就是varletconst之间的区别。在实际开发中,推荐优先使用const来声明常量,只有在需要修改变量值的情况下才考虑使用let

二作用域

  • 在JavaScript中,作用域是指变量和函数的可访问性的范围。

01 局部作用域

  • 在函数内部声明的变量或函数属于局部作用域。
  • 只能在该函数内部获取到。
function fn() {
    var str = "局部作用域的字符串";
    // 作用域内使用
    console.log(str);
    var print = function () {
        console.log("局部作用域的函数");
    }
    print();
}

fn();
// console.log(str); // 无法在外部访问
// print(); // 无法在外部调用

02 全局作用域

  • <script>标签或.js文件中声明的变量或函数属于全局作用域。
  • 可以在任意位置访问,包括局部作用域。
var num = 10;

function fn() {
    console.log("局部作用域中访问", num);
}
console.log("全局作用域中", num);
fn();

03 预解析(变量提升)

  • 在当前作用域中,JavaScript代码执行之前,浏览器会默认将带varfunction声明的变量/函数进行提前的声明或定义,但赋值过程仍按照代码的上下文顺序。
  • 变量只会声明,而函数既会声明也会定义。
console.log(num); // 输出: undefined
var num = 0;
console.log(num); // 输出: 0

var sum = 0;
function sum(){
    console.log(1 + 1);
}
console.log(sum); // 输出: 0
sum(); // TypeError: sum is not a function
  • 总结来说,全局变量在浏览器关闭时销毁,比较占内存;而局部变量在程序运行完毁,比较节约内存。

原文地址:https://blog.csdn.net/2302_77182979/article/details/136721125

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!