JAVASCRIPT功能了解其他功能

时间:2014-06-06 02:00:49

标签: javascript object object-oriented-analysis

从上到下读取javascript代码吗?

换句话说,如果我有:

function Color(){

}

function Weather() {

}

如果我想在Color功能中加入某种类型的天气对象,那么之后可以定义Weather吗?

3 个答案:

答案 0 :(得分:3)

函数Color在解析时不知道Weather,但是一旦被调用它就会知道。例如:

// Since variable declarations are hoisted to the top,
// myVar will be undefined (same as simply saying "var myVar;")
console.log(myVar); // <-- undefined
var myVar = 5;
console.log(myVar); // <-- 5

// test2 hasn't been defined yet, but it doesn't matter
// because test isn't being executed
var test = function() {
    test2();
}

// This will throw an error: undefined is not a function
// because test2 isn't defined
test();

var test2 = function() {
    alert("test2");
}

// This won't throw an error
test();

基本上,您应该在定义所有功能后执行。但是,如果您使用function functName() {}语法,则会像var语句一样将其挂起。

function test() {
    test2();
}

// Works!
test();
function test2() { alert("test2"); }

答案 1 :(得分:1)

JavaScript 解析&#34;自上而下&#34;和函数声明是提升结构 - 请参阅var functionName = function() {} vs function functionName() {}。解析在 JavaScript执行本身启动之前发生;因此,以下内容涵盖评估语义 1

鉴于函数提升的效果,以下代码是有效的,虽然它似乎可能不是:

function a(){
    return b();
}
alert(a()); // alerts "b", even though "b comes later"

// This declaration IS hoisted
function b() {
    return "b";
}

然而,考虑到即使使用&#34; var fn = ..&#34; (当分配悬挂时),排序通常并不重要,因为分配的评估在使用之前发生

var a = function () {
    return b();
}
// alert(a()); <- this would fail, because b is not assigned yet

// This assignment is NOT hoisted
var b = function () {
    return "b";
}

// But b is assigned before here, meaning that the order of the constructor
// functions still Just Doesn't Matter.
alert(a());

因此,在存在两个相互依赖的构造函数(例如颜色和天气)的情况下, 它们位于同一范围内并不重要相对于彼此。

1 重要的是表示依赖关系的表达式在评估时是可解析的(相对于评估代码,但不是与函数的解析/放置顺序有关。)

答案 2 :(得分:0)

所以基本上是的,你可以对以前的代码中出现的函数实现一些东西。 这有助于您更好地理解它。

    var weather = function() {
    if (weather === red) {
    console.log("weather is represented by the color red");
    }
    else {
    console.log("Not the right color");
    }
    };
    weather(red);