我对如何遵循此代码的流程感到困惑。 很明显,我目前是JavaScript的初学者。
据我所知: 前两行声明了2个全局变量,“性感”和“JavaScript”,但没有定义它们。
第3行:定义“性感”函数,该函数采用零参数。
第4行:调用性感时会发生什么。我发现这一行的语法令人困惑。我把它看成是这样的:如果“丑陋.Rails很热。”是真的,然后通过“性感!”到sexy.sexy。否则,传递“没有Python”。 to sexy.sexy。
第6行:定义名为Javascript的对象及其内容。
第7行:关键“性感”:值=变量性感,
第8行:键“是”:value = function“sexAppeal”
第9行:传递给函数sexAppeal的参数为true。
第10行:如果arguments [0]为false,则console.log“JavaScript is”+ this this.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();
答案 0 :(得分:3)
评论中的叙述:
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
是一个函数(函数是所有求值为true的对象)。
答案 1 :(得分:2)
我认为你最大的问题是:
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
(它是),则返回("ugly. Rails is HOT.","Sexy!")
- 由于"Sexy!"
而归为,
0,1
运算符(在控制台1,0
或a,b
或Javascript
中尝试)。
使用默认语法,我们可以创建任意数量的对象(和“类”)并使函数性能访问其属性。
现在is
块中发生了什么。
首先是(看documentation无法确认Is
。 is
是保留字,不应该使用 - 虽然它可以在Chrome中使用,但它不会在IE中(我很确定它不能在IE8中使用,此刻我的本地IE更新自己,所以不能真正测试它。)is
确实是一个保留关键字,虽然我很确定IE抱怨它也许是我的老年痴呆症。 var a = function()
{
arguments[0] = 'a';
console.log(arguments[0]);
}
a();
函数的有趣之处在于它表明JS中的参数可以重载。含义:
{{1}}
将输出'a';
你的思维过程是正确的 - 希望我对这些内容的解释是有道理的