有人可以解释这条线在做什么

时间:2018-07-14 15:52:33

标签: javascript reactjs

有人可以帮助我了解此函数在线发生的事情

function getContainer(container, defaultContainer) {

    //this line below
    container = typeof container === 'function' ? container() : container;

    return ReactDOM.findDOMNode(container) || defaultContainer;
}

正在为容器分配typeof容器的结果,但是如果容器等于一个函数,请调用该函数。

我有点头晕。这段代码是从React组件Modal的材料ui文档中提取的

3 个答案:

答案 0 :(得分:3)

这是在说以下话:

if container是一个将其分配给名为container的变量的函数,该函数将被调用,else将变量container设置为参数container传递给getContainer函数。

您也可以这样写,可能更容易阅读:

if (typeof container === 'function') {
   container = container();
} else {
   container = container;
}

在您的示例中,它使用三元运算符,这是另一种编写if / else语句的方式。您可以阅读更多here

答案 1 :(得分:3)

等于:

if(typeof container === 'function')container= container();
else container = container;

会调用容器(如果它是一个函数)并将结果存储在名为container的变量中。不是,它什么也不做。

答案 2 :(得分:0)

首先,了解基本知识和我们引用js中的函数/方法的方式

假设有一个名为容器的函数

function container() {

    let name = 'Js';

    return name;
}

console.log(container()); //js as we got the value here

console.log(typeof(container())) // string as this time we have value which of string type

console.log(typeof(container)) // function as we are pointig to function

当我们仅引用不带()的函数名称时,控制台中便具有完整的函数结构

  console.log(container);  
    ƒ container() {

        let name = 'Js';

        return name;
    }

要知道什么是typeof

所以在您的问题中,它会检查通过了什么,最后要知道的是

condition ? expr1 : expr2  

ternary operator