gpt4 book ai didi

Javascript 三元运算符语义

转载 作者:行者123 更新时间:2023-11-30 08:26:49 24 4
gpt4 key购买 nike

我试图深入研究 jQuery 的 src 代码,在 jQuery 开发版本 (3.2.1) 的 src 代码的最开始,我们发现:

( function( global, factory ) {
"use strict";
if ( typeof module === "object" && typeof module.exports === "object" ) {
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}

据我所知,我知道三元运算符出现在某些条件之后,但在这里它出现在赋值运算符之后 module.exports = global.document ?。你能解释一下吗?它在前面代码的上下文中做了什么?

最佳答案

三元运算符允许有条件地评估两个表达式(条件为真时第一个,否则第二个)。

module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};

赋值是指,将条件求值的结果赋值给module.export

三元运算符是一种语法糖,其工作方式如下:

function ternary_operator(condition, expression1, expression2) {
if (condition) {
return expression1;
} else {
return expression2;
}
}

所以你可以将代码翻译成:

module.exports = ternary_operator(global.document,
factory( global, true ),
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
});

请注意:

factory( global, true )

    function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};

它们都是表达式:factory函数激活的结果是一个表达式;函数值的定义也是一个表达式。

惰性求值

ternary_operator 函数提供了一个eager 三元运算符。在条件中评估表达式,然后返回其中一个。例如:

var l = ternary_operator(C, A, B);
1. evaluate C
2. evaluate A
3. evaluate B
4. activate function ternary_operator
5. assign to l the result of the function

Javascript 三元运算符是惰性的:这意味着首先评估条件,然后只评估其他表达式中的一个,从而提高性能。

var l = C ? A : B;
1. evaluate C
2.1 if C is true evaluate A
2.2 if C is false evalutate B
3. assign to l the expression evaluated

关于Javascript 三元运算符语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44289138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com