我知道變量是其他對象的屬性。例如:函數中的局部變量
var myVar = 'something';
是窗口對象的性質(如果它是在過程的全局範圍)。
如果我想找到變量的對象,我只需使用這個變量。但是:
function f() {
var myVar2 = 'something';
}
哪些對象不myVar2屬於? (myVar的屬於窗口對象,但對於myVar2?)
我想知道,謝謝。
我知道變量是其他對象的屬性。例如:函數中的局部變量
var myVar = 'something';
是窗口對象的性質(如果它是在過程的全局範圍)。
如果我想找到變量的對象,我只需使用這個變量。但是:
function f() {
var myVar2 = 'something';
}
哪些對象不myVar2屬於? (myVar的屬於窗口對象,但對於myVar2?)
我想知道,謝謝。
它不屬於一個對象。它屬於功能f
的範圍。你可以通過myVar
在f
之內訪問它。您不能在f
以外訪問它。
如果你沒有
function f() {
this.myVar = 1;
}
現在你可以做
var myF = new f();
myF.myVar
事實上,這如何用戶定義的對象有時定義。
但根據這:http://11heavens.com/everything-is-a-property-of-an-object-in-javascript 一切都是一個對象的屬性。 – 2012-08-02 01:17:52
根據某些人{}也被稱爲json對象。 – hvgotcodes 2012-08-02 01:22:13
你應該在你的問題中鏈接該網站。不,這篇文章的作者是錯誤的。 – Bergi 2012-08-02 01:23:47
myVar2
屬於本地範圍(f
)和myVar
全球範圍。
var
做了一些有趣的事情。 var
語句被提升到其功能範圍的頂部。該var
的功能範圍是什麼功能,它正好是在
JavaScript沒有塊級的範圍,這意味着:
(function() { //a closure to create new scope
var foo;
foo = 1;
if (condition) {
var bar;
bar = 3;
}
}());
...等價於...
(function() {
var foo,
bar;
foo = 1;
if (condition) {
bar = 3;
}
}());
如果var
語句沒有父母,這反而增加了變量作爲一個屬性來全球範圍內,這在Web瀏覽器恰好是window
。
這是只有時間,使用var
將創建一個屬性。如果想創建一個對象的屬性,你只需要設置:
(function() {
var foo;
foo = {};
foo.bar = 'baz'; //this creates the `bar` property on `foo`
}());
JavaScript是一種原型的語言,原型繼承。函數是一流的對象(因爲JavaScript不是針對函數的種族主義)。這意味着函數可以像任何其他對象一樣使用。
你可以將它們設置:
(function() {
var foo;
//foo is now a function
foo = function() {
alert('Hello World');
};
}());
您可以將它們設置屬性:
(function() {
var foo;
foo = function() {
alert('Hello World');
};
foo.bar = 'baz'; //this works just fine
}());
,你甚至可以將它們作爲參數:
(function() {
var foo,
bar;
foo = function() {
alert('Hello World');
};
bar = function (c) {
c();
};
bar(foo); //guess what this does?
}());
另一個很酷的事情,其功能那麼,他們是作爲構造函數嗎?所有的功能本身的構造函數,你只需要使用new
關鍵字打電話給他們:
(function() {
var foo; //case sensitive
//it doesn't matter whether you use `function Foo`
//or `var Foo = function...`
function Foo() {
alert('Hello World');
}
foo = new Foo();
foo.bar = 'baz';
}());
重要細節在使用構造是函數的上下文(this
)將被設置爲通過構造函數創建的對象。這意味着您可以在構造函數中設置對象的屬性:
(function() {
var foo;
function Foo() {
this.bar = 'baz';
}
foo = new Foo();
alert(foo.bar); //'baz'
}());
我想OP想知道[範圍變量對象](http://es5.github.com/#x10),而不是提升和一流功能: - | – Bergi 2012-08-02 01:37:55
「我知道變量是其他對象的屬性」 - 這是不正確的。 – zzzzBov 2012-08-02 01:16:30
優秀的答案:http://stackoverflow.com/a/101089/1048572,你可能會對[在範圍內獲取所有變量]感興趣(http://stackoverflow.com/q/2051678/1048572) – Bergi 2012-08-02 01:29:18