Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Var的Javascript作用域_Javascript - Fatal编程技术网

带有Var的Javascript作用域

带有Var的Javascript作用域,javascript,Javascript,我不知道我的方法和“正确的方法”有什么区别。我得到我的方式是错误的范围,但它是如何产生的结果呢?我不明白结果是怎么出来的 以下是函数: convertObjectToList({ name: 'Holly', age: 35, role: 'producer' }); 想要的答案:[['name'、['Holly']、['age',35]、[role'、[producer']] 我的方式: function convertObjectToList(obj) {

我不知道我的方法和“正确的方法”有什么区别。我得到我的方式是错误的范围,但它是如何产生的结果呢?我不明白结果是怎么出来的

以下是函数:

convertObjectToList({
    name: 'Holly',
    age: 35,
    role: 'producer'
});
想要的答案:
[['name'、['Holly']、['age',35]、[role'、[producer']]

我的方式:

function convertObjectToList(obj) {
    var brackOut = [];
    var brackIn = [];

    for (let key in obj) {
        brackIn.push(key);
        brackIn.push(obj[key]);
        brackOut.push(brackIn);
    }

    return brackOut;
}

convertObjectToList({
    name: 'Holly',
    age: 35,
    role: 'producer'
});
结果:

[ [ 'name', 'Holly', 'age', 35, 'role', 'producer' ],
  [ 'name', 'Holly', 'age', 35, 'role', 'producer' ],
  [ 'name', 'Holly', 'age', 35, 'role', 'producer' ] ]
vs

“正确的方法”:

function convertObjectToList(obj) {
    var brackOut = [];

    for (let key in obj) {
        var brackIn = [];

        brackIn.push(key);
        brackIn.push(obj[key]);
        brackOut.push(brackIn);
    }

    return brackOut;
}

convertObjectToList({
    name: 'Holly',
    age: 35,
    role: 'producer'
})
结果:


这和变量的范围有关,但有人能解释我的答案是怎么得到的吗?这是如何工作的?

实际上
brackIn
在这两种情况下的作用域都是相同的。重要的是在循环内部为
brackIn
分配一个新数组:

 var brackIn;

 for(let key in obj) {
   brackIn = []; // <<< !!!
   //...
 }
var-brackIn;
用于(输入obj){
布拉金=[]//