从chrome开发者控制台调用javascript函数

从chrome开发者控制台调用javascript函数,javascript,Javascript,非常简单的脚本: 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控制台

非常简单的脚本:

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进行同样的验证


问题在于您的
foo
函数不属于全局范围。控制台基本上可以访问
窗口
所做的一切。因此,如果它在那里未定义,那么它在控制台中也未定义。例如,这可能是控制台中没有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,那么您就不能调用它。

您正试图在JSFiddle中实现这一点,它将javascript“隐藏”在控制台之外。它实际上不在你可以执行的范围之内。它不像你想象的那样在那里工作

若您创建了一个简单的HTML文件,并将javascript插入标记之间,那个么在控制台中运行“foo()”就不会有问题

创建test.html并将其放入:

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

函数foo(){
返回“bar”
}
log(foo());

foo
不得公开披露我承认我不能100%确定你的意思。你的意思是不能从全局范围访问它吗?还有什么不可以呢?这里的问题是我们无法重现您所看到的内容。jsfiddle将您的代码包装在匿名函数中,因此超出了全局范围。请参阅此具有不同设置的备用版本,它可以正常工作。我得到了我期望的
bar
bar
,但是运行
foo()我得到了未定义的错误?不确定我们是否在做相同的事情。打开记事本,粘贴我答案中的代码,另存为test.Html。然后在chrome中打开test.html,打开控制台,并键入“foo();”您的JSFIDLE使用onload事件处理程序包装。在javascript/jquery中创建对象并在其中存储相关函数是一种好的做法吗?与其让函数只是在全局范围内浮动?@Starkers-最佳实践是只有一个全局变量来保存所有函数的生存期和定义。这就是为什么以jQuery为例,他们所有的API都在
$
jQuery
下,而这是唯一的入口。通常,这是通过内部化原型并返回构建实例来完成的。