专业编程基础技术教程

网站首页 > 基础教程 正文

javascript中console输出的引用变量,会受到上下文影响

ccvgpt 2024-10-16 08:28:32 基础教程 11 ℃

现在写项目,写javascript比写后端代码还多,尤其是原生写法,往往会用到google开发者工具,其中的console.log、console.table等方法使用频度非常高。

一直以来都认为console输出的变量总是上面代码的赋值结果,因为javascript的执行顺序是自上而下。但是这回差点被console误导了。

javascript中console输出的引用变量,会受到上下文影响

先说结论:console输出的变量如果是引用类型的,则要注意会受到上下文影响。

简单的说就是console后面的代码如果修改了console输出的引用变量,则console的输出会是后面代码赋值的结果,而不是console上面代码赋值的结果

代码举例:

// 这里先定义引用变量
let opts = {
	columns: [
    {field:'id', title:'ID'},
    {field:'name', title:'名称'}
  ]
};

// 这里通过console.log输出到控制台(假设在调试变量)
// 但是代码继续往下执行
console.log(opts.columns);

// 代码继续执行,中间可能还有很多代码......

// 代码继续执行,这里修改了opts.columns的值
opts.columns.push({});

以上console.log输出的结果如下:

// columns
[
  {}, // 这是下文代码影响到了上面console.log的输出
 	{field:'id', title:'ID'},
  {field:'name', title:'名称'}
]


虽说下文修改引用变量会改变原变量的值,但是console是不是智能点,输出时就应该是截止到那个点,而不是输出的变量还受到后面代码的影响,所以console的真正输出时机不是即时的,应该是上下文结束后才输出,所以才会受到后面代码的影响。

Tags:

最近发表
标签列表