JavaScript面试题一

一、解释JavaScript中let和var的区别?
在JavaScript中,letvar都是用于声明变量的关键字,但它们之间存在一些重要的区别:

  1. 作用域(Scope)

    • var声明的变量具有函数作用域或全局作用域。这意味着它们可以在声明它们的函数内部或全局上下文中被访问。如果在函数内部没有使用var关键字声明变量,那么该变量将成为全局变量。
    • let声明的变量具有块作用域(block scope),即它们只在包含它们的代码块(如大括号{}内)中有效。这包括if语句、for循环等结构中的代码块。
  2. 提升(Hoisting)

    • 使用var声明的变量会被提升(hoisted)到它们所在作用域的顶部。这意味着你可以在声明变量之前使用它,但此时它的值是undefined
    • let声明的变量也会被提升,但不会初始化。这意味着在声明之前引用let变量会导致一个引用错误(ReferenceError)。这个区域被称为暂时性死区(Temporal Dead Zone, TDZ)。
  3. 重新声明

    • 使用var可以在同一作用域内多次声明同一个变量,而不会报错,但这样做通常是不好的编程实践。
    • 使用let在同一作用域内重新声明同一个变量会导致语法错误(SyntaxError)。
  4. 全局作用域中的声明

    • 在全局作用域中使用var声明的变量会成为全局对象的属性(在浏览器中是window对象)。
    • 使用let在全局作用域中声明的变量不会成为全局对象的属性,它们只存在于全局作用域中。
  5. for循环中的闭包

    • 由于var的作用域限制在函数内部,因此在for循环中使用var声明的变量在循环结束后仍然可以被访问,但其值通常是循环结束时的最后一个值(由于变量提升和闭包行为)。
    • 使用let声明的变量在每次循环迭代中都会创建一个新的块级作用域,因此每个迭代中的变量都是独立的,避免了上述问题。

综上所述,let提供了比var更严格的变量作用域和更可控的行为,因此在现代JavaScript编程中更推荐使用let来声明变量。

二、闭包是什么,并给出一个简单的例子?
闭包 是指一个函数可以记住并访问其所在的词法作用域,即使这个函数在其词法作用域之外执行。换句话说,闭包使得函数可以访问并操作其外部作用域的变量。

以下是一个简单的闭包例子:

function outerFunction(outerVariable) {
    return function innerFunction(innerVariable) {
        console.log('outerVariable:', outerVariable);
        console.log('innerVariable:', innerVariable);
    };
}

// 创建一个闭包
const myClosure = outerFunction('Hello from outer function!');

// 调用闭包
myClosure('Hello from inner function!');

// 输出:
// outerVariable: Hello from outer function!
// innerVariable: Hello from inner function!

在这个例子中,outerFunction是一个外部函数,它接受一个参数outerVariable。这个函数内部定义并返回了另一个函数innerFunction,这个内部函数也有自己的参数innerVariable。由于innerFunction是在outerFunction内部定义的,所以它可以访问outerFunction的词法作用域中的变量outerVariable。当outerFunction执行并返回innerFunction时,我们得到了一个闭包(myClosure),这个闭包可以访问并记住outerVariable的值。当我们调用myClosure时,它仍然可以访问到outerVariable的值,即使outerFunction已经执行完毕。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笃励

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值