【发布时间】:2015-07-19 12:36:45
【问题描述】:
将对象从一个函数传递到另一个函数是否需要任何特殊措施?我对面向对象的 JavaScript 比较陌生,所以如果有一个简单的修复方法,请原谅我。 这是我遇到的问题的一些示例代码。
function foo {
var x = 0;
var y = 0;
/* this is the JavaScript Object that is passed in
cell = {
left: {x: someInt, y: someInt},
up: {x: someInt, y: someInt},
right: {x: someInt, y: someInt},
down: {x: someInt, y: someInt},
x: someInt,
y: someInt
}
*/
this.turn = function(cell){
console.log(cell);
processNeighbors(cell);
smartMove(x,y, cell);
function smartMove(x,y,cell) {
// make a smart decision
}
function processNeighbors(x, y, cell) {
console.log(cell); // this is the line of the undefined error
// process all neighbors
}
}
我希望两个输出是相同的,但是,processNeighbors 函数内的 console.log() 返回一个有效响应,bar 函数返回一个“无法读取未定义的属性“值”。
所以当一个对象从一个函数传递到下一个函数时,它会超出范围吗?我不会在任何函数中更改对象本身。
【问题讨论】:
-
这不是“JSON 对象”。它是一个“JavaScript 对象”。学习这种区别是值得的。 JSON 是一种(通常基于字符串的)格式,用于数据交换。
-
如果对象或任何其他值在从一个函数传递到另一个函数时“超出范围”,那么整个 Web 将戛然而止。
-
“我传递的对象肯定是 JSON”——不,不是,它只是一个对象。
-
@zerkms 和 torazaburo 对不起,我很笨。 非常感谢您的帮助。有一个很好的SO thread 我刚刚读到的两者之间的区别。
-
@SeeDart - 无需道歉! JSON 和 JavaScript 对象之间的区别和关系是一个非常常见的混淆点。感谢您发布指向该其他线程的链接 - 这对于遇到相同问题的其他人应该非常有帮助。
标签: javascript scope