【问题标题】:Call javascript function from chrome developer console [duplicate]从chrome开发者控制台调用javascript函数[重复]
【发布时间】:2014-07-01 17:28:41
【问题描述】:

非常简单的脚本:

function foo(){
    return "bar"
}

console.log( foo() );

控制台:

> bar // sanity test that proves everything's working
> foo(); // this guy is key!
> ReferenceError: foo is not defined

我应该如何调用 foo();用于调试和实验目的?

这不是练习吗?我喜欢使用 IRB / Rails 控制台来验证我的 ruby​​ 代码,并希望用 JavaScript 做同样的事情

http://jsfiddle.net/m2muL/

【问题讨论】:

  • foo 不得公开
  • 我承认我不是 100% 确定你的意思。你的意思是它不能从全局范围内访问?什么不是?
  • 这里的问题是我们无法重现你所说的你所看到的。
  • jsfiddle 将您的代码包装在一个匿名函数中,因此在全局范围之外。请参阅具有不同设置的此替代版本,它可以工作。 jsfiddle.net/UN5ZJ

标签: javascript


【解决方案1】:

问题是您的foo 函数不是全局范围的一部分。控制台基本上可以访问window 所做的一切。结果,如果它在那里未定义,那么它在控制台中是未定义的。例如,这可能是 foo 在控制台中不可用的示例。

(function(){
   function foo(){
     return "bar";
   } 
   console.log(foo()); //"bar"
})()

console.log(foo()); //ReferenceError: foo is not defined

找到一种方法来定位此方法的暴露位置。如果它位于对象或方法内部,请确保从控制台引用它。

var foobar = {
 foo: function(){ return "bar" ;}
};

console.log(foobar.foo()); //"bar"

如果你不能引用 foo,那么你就不能调用它。

【讨论】:

  • 我能做到。在 javascript/jquery 中创建对象并将相关函数存储在其中是否是一种好习惯?而不是让函数在全局范围内浮动?
  • @Starkers - 最佳实践是只有一个全局变量来保存所有函数的生命周期和定义。这就是为什么以 jQuery 为例,他们所有的 API 都在 $jQuery 下,这是唯一的入口。通常这是通过内部化原型并返回构建的实例来完成的。
【解决方案2】:

您正在尝试在 JSFiddle 中执行此操作,这会将您的 javascript 从控制台“隐藏”起来。它实际上不在您执行的范围内。它不像你想象的那样在那里工作......

如果您创建了一个简单的 HTML 文件并将您的 javascript 粘贴在标签之间,那么在控制台中运行“foo()”就不会出现问题。

创建 test.html 并将其放入:

<script>
function foo(){
    return "bar"
}
console.log( foo() );
</script>

【讨论】:

  • 我得到了bar bar 就像我期望的那样,但是在运行foo(); 时我得到了未定义的错误?
  • 不确定我们是否在做同样的事情。打开记事本,将代码粘贴到我的答案中,另存为test.Html。然后在chrome中打开test.html,打开控制台,输入“foo();”
  • 你的 jsfiddle 被一个 onload 事件处理程序包裹起来。
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 2011-10-07
  • 2012-07-03
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多