JavaScript 中那些有趣的知识点

一、引言
JavaScript 作为一门广泛应用于网页开发、后端开发(如 Node.js )等众多领域的编程语言,有着许多新奇有趣的特性。这些特性不仅能让我们的代码更加灵活和高效,还充满了趣味性,今天就带大家来探索几个有意思的 JavaScript 知识点。

二、自动分号插入(ASI,Automatic Semicolon Insertion)
在 JavaScript 中,我们常常可以省略语句末尾的分号,这是因为 JavaScript 引擎会自动进行分号插入。例如:

let num = 10
console.log(num)

这里省略了 let num = 10 末尾的分号,JavaScript 引擎会自动帮我们补上。但这也会带来一些 “陷阱”。比如下面这种情况: 

return
{
    message: '这是一个对象'
}

我们可能期望返回一个包含 message 属性的对象,但实际上 JavaScript 引擎会自动在 return 后面插入分号,变成 return; ,导致函数返回 undefined 。所以在一些容易产生歧义的地方,还是显式地加上分号更保险。

三、函数的柯里化(Currying)
函数柯里化是指将一个多参数函数转化为一系列单参数函数的过程。举个例子,我们有一个简单的加法函数:

function add(a, b) {
    return a + b;
}

通过柯里化可以将它变成这样: 

function addCurrying(a) {
    return function(b) {
        return a + b;
    };
}
let add5 = addCurrying(5);
console.log(add5(3)); // 输出 8

这种方式的好处在于可以提前固定一些参数,生成更特定功能的函数,增加了函数的复用性和灵活性。比如在处理一些表单验证逻辑时,我们可以根据不同的验证规则提前柯里化验证函数。

四、神奇的 null 和 undefined
null 和 undefined 都表示 “无”“空” 的概念,但它们还是有区别的。

undefined 表示一个变量声明了但未初始化,或者函数没有明确返回值时的默认返回值。例如:

let variable;
console.log(variable); // 输出 undefined
function noReturnValue() {}
console.log(noReturnValue()); // 输出 undefined
  • null 则是一个表示 “空对象指针” 的特殊值,通常是人为主动赋值表示空值。比如:
let obj = null;

有趣的是,在进行类型判断时,typeof null 会返回 "object" ,这其实是 JavaScript 早期的一个设计缺陷,一直保留到现在。

五、事件循环(Event Loop)
JavaScript 是单线程语言,为了实现异步操作,引入了事件循环机制。简单来说,事件循环会不断检查调用栈和任务队列。当调用栈为空时,就会从任务队列中取出任务放入调用栈执行。
我们看一个例子:

console.log('同步任务 1');
setTimeout(() => {
    console.log('异步任务');
}, 0);
console.log('同步任务 2');

输出结果是 “同步任务 1”“同步任务 2”“异步任务” 。这是因为 setTimeout 是异步任务,会被放到任务队列中,只有当同步任务执行完,调用栈为空时,才会从任务队列中取出 setTimeout 的回调函数执行。

六、结语
JavaScript 中还有许多像这样有趣又实用的知识点,不断探索这些特性,不仅能让我们写出更优雅、高效的代码,还能让我们在编程过程中收获更多乐趣。希望大家通过这篇博客,能对 JavaScript 有更深的认识,在后续的开发中更好地运用它。

希望这篇博客对你有所帮助,如果有任何问题和建议欢迎留言讨论 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值