在这个Javascript代码中,`word`被认为是函数,变量还是对象?

时间:2013-06-20 15:29:31

标签: javascript function variables object

我知道一个对象是一个变量,而一个函数是一种对象,但我仍然对你应该如何引用以下代码中的word感到困惑:

var word;
exports.setWord = function(c, ch){
  word = c.get('chats')[ch];
  Ti.API.debug('Course ' + course.get('title') 
};

var updateView = function(){
    for(var i = 0; i < word['comments'].length; i++){
    var text = word['comments'][i],  
};

3 个答案:

答案 0 :(得分:0)

“对象是变量”并非严格属实。变量可以指向到对象,但对象本身不是变量。例如:

var a = new Foo();
var b = a;

这里有两个变量,但只有一个对象。现在,通常你会听到人们说“a是一个对象”或“一个是Foo”,但这只是一个口头/书面的快捷方式,更正确的“a是一个当前指向Foo类型对象的变量”。

在您的情况下,'word'始终是一个变量。它最初是一个不指向任何东西的变量,换句话说它是未定义的。在setWord函数中,你将一个对象分配给'word',所以你现在可以说“word是一个对象”,但更准确地说,你的意思是“word是一个当前指向一个对象的变量”。

答案 1 :(得分:0)

你将单词称为“变量单词”,但这可能不是你所要求的。

在第1行中,您所知道的是声明了名为“word”的变量,但未定义。

setWord函数中,您将word设置为......某事。从它自己的功能来看,我们不知道它的设置是什么,只是设置它。

updateView告诉我们更多关于word的期望。 word['comments']告诉我们word旨在成为名为comments的成员的对象。 word['comments']等同于word.comments - 唯一的区别是[]语法允许您使用变量访问数据成员。我们可以告诉我comments做了什么,它是有长度的东西。虽然它可能是一个数组,但我们无法保证。

我们也无法保证word代表updateView函数中的任何内容,因为在exports.setWord之前调用updateView时,您提供的代码不会显示调用。如果不是,则word仍未定义,word['comments'].length将引发错误。

由于所有对象都是动态的,因此您永远不会真正知道对象内部的内容。您可以从代码中了解对象的期望。如果要查看word对象中的每个成员,可以执行以下操作:

var s = "";
for (var member in word) {
    if (word.hasOwnProperty(member)) {
        s += member + ": " + word[member] + " [" + typeof(word[member]) + "]";
    }
}
alert(s);

这将遍历word中的每个成员,如果它只属于word,则打印出其名称,值和类型。它可以让您更好地了解word对象的期望。

答案 2 :(得分:0)

Word是一个变量。无论内在的是什么,它总是一个变数。因为Javascript是动态类型,变量可能会改变它存储的类型。

在脚本的开头,字是ponting到Undefined对象,后来它指向一个对象,但它是一个变量。

编辑内容:

当你声明一个新变量时,它是未定义的,直到你为它指定了一些东西。

var word; //word is undefined

在代码中有一个分配给单词

word=c.get('chats')[ch];//Now it has a primitive value or a pointer to an object

但现在不知道里面的内容是什么。

可以用两种不同的方式调用对象:obj ['property']或object.property。

word['comments'] //word is pointing an object

在这里你使用第一个来调用 word ,所以我们认为之前的asignation是一个对象asignation。

最后你将 word ['comments'] 的结果称为数组(或具有长度属性和数字索引的对象)

word['comments'].length
word['comments'][i]

请记住,在javascript中,所有对象都被指定为引用,因此变量永远不会是对象,而是指向对象的指针。