Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从中理解示例代码http://javascriptissexy.com/javascript-is-super-sexy/_Javascript - Fatal编程技术网

从中理解示例代码http://javascriptissexy.com/javascript-is-super-sexy/

从中理解示例代码http://javascriptissexy.com/javascript-is-super-sexy/,javascript,Javascript,我对如何遵循这段代码的流程感到困惑。 很明显,我目前是JavaScript的相对初学者 据我了解: 前两行声明了两个全局变量,“sexy”和“JavaScript”,但没有定义它们 第3行:定义接受零参数的函数“sexy” 第4行:调用sexy时会发生什么。我发现这一行的语法令人困惑。我把它理解为:如果“丑陋。Rails是热的。”是真的,那么把“Sexy!”传给Sexy.Sexy。否则,将“no Python.”传递给sexy.sexy 第6行:定义名为Javascript的对象及其内容 第7行

我对如何遵循这段代码的流程感到困惑。 很明显,我目前是JavaScript的相对初学者

据我了解: 前两行声明了两个全局变量,“sexy”和“JavaScript”,但没有定义它们

第3行:定义接受零参数的函数“sexy”

第4行:调用sexy时会发生什么。我发现这一行的语法令人困惑。我把它理解为:如果“丑陋。Rails是热的。”是真的,那么把“Sexy!”传给Sexy.Sexy。否则,将“no Python.”传递给sexy.sexy

第6行:定义名为Javascript的对象及其内容

第7行:键“sexy”:值=变量sexy

第8行:键“is”:值=功能“SEXPOINT”

第9行:传递给函数sex上诉的参数为true

第10行:如果参数[0]为false,那么console.log“JavaScript是”+无论这个.sexy()的计算结果是什么

最后一行:使用零参数调用JavaScript对象内部的“is”函数

我不太确定如何从最后一行的函数调用一直到它记录最终输出

任何叙述都将不胜感激。谢谢大家!

var sexy, 
    JavaScript;
function sexy() {
    return this.sexy ? ("ugly. Rails is HOT.","Sexy!") : "no Python.";
}
JavaScript = { 
    sexy:sexy, 
    is:function (sexAppeal) {
        sexAppeal = true;
        if (!arguments[0]) {
            console.log("JavaScript is " + this.sexy());
        }
    }
};
JavaScript.is();

我认为你最大的问题是:

function sexy() {
    return this.sexy ? ("ugly. Rails is HOT.","Sexy!") : "no Python.";
}
它确实定义了全局函数
sexy
。让我们稍微修改一下这个代码,这样它就开始有意义了

JavaScript = { 
    sexy: function() {
        return this.sexy ? ("ugly. Rails is HOT.","Sexy!") : "no Python.";
    },
    is:function (sexAppeal) {
        sexAppeal = true;
        if (!arguments[0]) {
            console.log("JavaScript is " + this.sexy());
        }
    }
};
一切都好。虽然现在该函数不是全局函数,但它向我们展示了它的功能-如果
this.sexy
是在这个对象(它是)中定义的,则返回
(“丑陋的.Rails是热的。”,“sexy!”)
-由于
运算符(在控制台中尝试
0,1
1,0
a,b
)而枚举到
“sexy!”

使用默认语法,我们可以创建任意数量的对象(和“类”),并使函数能够访问它们的属性

现在在
Javascript
块中发生了什么

第一件事是
Is
是一个保留字,不应该使用-虽然它在Chrome中可以工作,但在IE中不会(我相当确定它不能在IE8中使用,目前我的本地IE已经自我更新,所以不能真正测试它)。(查看无法确认
是否是
确实是一个保留关键字,尽管我相当肯定IE对此表示不满。可能是我的痴呆症发作了)。
函数的有趣之处在于它表明JS中的参数可以重载。意思是:

var a = function()
{
   arguments[0] = 'a';
   console.log(arguments[0]);
}

a();
将输出‘a’

你的思维过程是正确的-希望我对这些比特的解释有意义

评论中的叙述:

var sexy,  // declare a variable named `sexy`
    JavaScript; // and one named `JavaScript`
function sexy() { // declare a function named `sexy` which overrides the `sexy` variable
    return this.sexy ? // ternary operator condition is that `this.sexy` have a truthy value
           ("ugly. Rails is HOT.","Sexy!") : // comma operator, equivalent to 'Sexy!'
           "no Python."; // falsy result
}
JavaScript = { // initialize JavaScript to an object (with two properties)
    sexy:sexy, // property `sexy` references the function above
    is:function (sexAppeal) { // property `is` references this unnamed function defined right here
        // inside the function the first argument can be referenced as `sexAppeal`
        sexAppeal = true; // override the value of `sexAppeal` to be `true`
        if (!arguments[0]) { // `arguments[0]` is the original value of the first argument
            console.log("JavaScript is " + this.sexy()); // prints `Javascript is Sexy!`
        }
    }
};
JavaScript.is(); // call the unnamed (`is`) function above with `this === JavaScript` and `sexAppeal === undefined`

额外:三元条件是真的,因为
this.sexy
==
JavaScript.sexy
这是一个函数(函数都是计算为真的对象)。

这个
什么?stuff:otherStuff
被称为三元if语句,它的作用几乎和您认为的一样。它说
如果this.sexy是真的,返回丑恶的,否则不返回python
。这是一段非常丑恶的代码。我当然不想向这样写的人学习javascript。显然,这不是一段有用的代码,但它展示了javascript的一些有趣特性。三元运算符、逗号运算符、对象文字、行为委托和变量参数。谢谢,在上面的第一个代码块中看到函数的重写,我真的受益匪浅。上面的“重载”
参数[0]
的例子很有趣。这也让我想知道,为什么原始示例函数的作者会通过
sexchaint=true来麻烦重载因为我认为下一行的
if(!arguments[0])
无论如何都会计算为true。这是您提出的一个很好的观点-虽然
arguments
数组是可重载的,但在函数作用域中创建的变量是副本。因此,虽然
sexchain
值为true,但参数[0]仍然是
未定义的