对象中console.log()的奇怪行为

时间:2017-09-30 11:02:33

标签: javascript node.js

$in_fields = array();
$in_values = array();
$placeholders = array(); // new array   

foreach ($_POST as $key => $value) {
    if (!empty($value)) {
        $value = sql_escape($value);
        $in_fields[] = "[{$key}]";
        $in_values[] = "'{$value}'";

        // add a placeholder to the array
        $placeholders[] = "?";
    }
}

if (!empty($in_fields)) {
    $sql = "INSERT into [table_name](";
    $sql .= implode(", ", $in_fields);
    $sql .= ") VALUES (" . implode(",", $placeholders) . ")";

    if (executeSql($sql, $in_values)) {
        $success = "Successfully Added New Record";
    }
}

输出: -     var foo = { a : function(){ console.log(this) }, b : console.log(this) } foo.a() {}

首先声明

{ a: [Function: a], b: undefined }变量,因此评估键foo,通过b为我们提供全局对象: - 它在节点中显示console.log()并{{1在浏览器中

但是,在调用{}时,Window会显示foo.a()

我错过了一些概念吗?为什么不再对它进行评估?

谢谢

1 个答案:

答案 0 :(得分:1)

您创建一个foo对象,并为其分配两个属性:

  • 您将a设置为包含文字function(){console.log(this)}
  • 的函数
  • 您将b设置为console.log(this)的返回值。 console.log(this)立即执行,并注销该对象。该对象尚未获得其属性,因此它会注销{}。 console.log()的返回值为undefined,因此b设置为undefined

您现在已经初始化了对象,其中a = some函数,b = undefined。稍后,当你调用a时,它会使用a = some函数注销foo对象,并且b = undefined。