Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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
Javascript 为什么函数变量(登录控制台时)不显示整个函数体?_Javascript_Tostring_Console.log - Fatal编程技术网

Javascript 为什么函数变量(登录控制台时)不显示整个函数体?

Javascript 为什么函数变量(登录控制台时)不显示整个函数体?,javascript,tostring,console.log,Javascript,Tostring,Console.log,我想知道为什么函数变量(登录控制台时)不显示整个函数体,而toString()方法显示整个函数体 function person(name) { this.f_name = name; return function print_name (){ alert("Your Name Is: " + this.f_name); } } var myfunc = person('James'); console.log(myfunc

我想知道为什么函数变量(登录控制台时)不显示整个函数体,而toString()方法显示整个函数体

function person(name) {
    this.f_name = name;

    return function print_name (){
            alert("Your Name Is: " + this.f_name);
        }
  }

var myfunc = person('James');

  console.log(myfunc); //-> function print_name()

  console.log(myfunc.toString()); // ->"function print_name(){
        alert("Your Name Is: " + this.f_name);
    }"

所有不能打印的
console.log
都会调用相应的
toString
方法,以便仍然能够表示/总结有关函数的最重要细节

正如你在这里看到的:-特别是这句话:

toString方法返回中对象的字符串表示形式 函数声明的形式。也就是说,toString反编译 函数,返回的字符串包括函数关键字 参数列表、大括号和函数体的源[1]

这基本上意味着您不需要知道要调试的内部构件,因为您可以查看其源代码(在devtools或编辑器中),因此不需要打印所有内容—只需要程序员当时需要/方便知道的内容

[1] -我不知道为什么会有这句话,或者我误解了。(如以下评论中所述)

我在一些浏览器的开发工具中运行了以下代码以进行比较:

console.log(函数(a,b){返回a+b;})

输出:

  • Firefox:
    函数()
    -不带参数,但单击可查看更多信息
  • Chrome:
    function(a,b){returna+b}
    w/arguments,单击它会将您带到devtools中包含函数源的窗格
  • Safari:
    函数(a,b){返回a+b;}
    ,带参数,单击不做任何操作
由于我在Mac电脑上,我无法在IE中测试这一点,但输出很有趣。
开发人员更喜欢在哪个浏览器中开发,因为这只是一个开发API,而不是跨浏览器一致的东西。

因为这是
toString
的明确功能,而不是控制台的明确功能。。。!?您使用的浏览器和版本是什么<代码>控制台
实现各不相同您是说控制台应该调用
.toString
,它应该包含函数体,但事实并非如此@deceze感谢您指出这一点,似乎文档中存在错误,或者我们误解了“函数体的来源”嗨,我在Chrome中尝试了上述方法,是的
console.log(myfunc)
输出了与Firefox不同的整个func定义。我怀疑我的理解,我在理解JS时遗漏了一点(我是一个初学者),但事实证明是浏览器控制台造成了混乱。下次我将使用
alert()
进行测试输出,我认为这是跨浏览器的。@sapnakoramagiri
alert()
console.log()
有非常不同的用途,如果您有一个大数据结构(包含大量嵌套对象或数组或w/e的对象),那么
console.log()
将取代
alert()
无论采用哪种方法,只要试一下,看看哪种方法效果最好。我个人觉得
alert()
很烦人,因为它会在浏览器提示中显示文本,你必须点击离开,
console.log()
只会登录到控制台,如果你忘记删除一个控制台,它不会意外地在一个实时网站上弹出^