我正在浏览这篇关于函数声明和函数表达式之间差异的博客.
它给出了这两个例子.他们将第一个称为"匿名函数表达式",将第二个称为"命名函数表达式".
// anonymous function expression
var a = function(){
return 3;
}
// named function expression
var b = function bar(){
return 3;
}
Run Code Online (Sandbox Code Playgroud)
我在Chrome的JS控制台中测试了这两个,我看到以下内容:
a()
=> 3
b()
=> 3
bar()
=> bar is not defined
Run Code Online (Sandbox Code Playgroud)
我的问题是:在第二个函数表达式声明中,"bar"的重点是什么?一般来说,为什么要使用命名函数表达式?
我正在学习JavaScript,我觉得我理解提升得体,所以我不会问它是什么,或者怎么做,或类似的东西.
提升是否好?如果可以,我应该使用声明我的变量
var foo = function() {};
Run Code Online (Sandbox Code Playgroud)
或者我应该使用它吗?
function foo() {}
Run Code Online (Sandbox Code Playgroud)
我什么时候应该提升,什么时候不应该?或者它甚至是否重要?
我试图弄清楚它是如何工作的.当我引用一个尚未声明的命名Javascript函数时,在某些情况下,它可以工作.但是,如果我使用函数文字,它不会,但它也不会失败ReferenceError.
function works() {
var works_ref = foo;
function foo() {
console.log('ok');
};
console.log('works ' + works_ref);
}
function fails() {
var fails_ref = foo;
var foo = function() {
console.log('ok');
};
console.log('fails ' + fails_ref);
}
works();
fails();
Run Code Online (Sandbox Code Playgroud)
这回来了
"works function foo() {
console.log('ok');
}"
"fails undefined"
Run Code Online (Sandbox Code Playgroud)
我想知道第一个例子是如何工作的 - 这是一个解释语言,没有编译,所以我希望任何类型的前向引用都会失败 - 为什么第二个例子不能生成ReferenceError?
为什么没有为函数创建引用f
if ( function f() { } ) {
console.log( typeof f );
}
// result: undefined Run Code Online (Sandbox Code Playgroud)
而分配/设置变量正常工作内if( )
if ( f = 'assigned' ) {
console.log( typeof f );
}
// result: stringRun Code Online (Sandbox Code Playgroud)
我需要知道在第一种情况下会发生什么,因为第二种情况正如预期的那样工作
有人可以解释一下吗?
const func = () => {
someFunction() // error here
return function someFunction() {
console.log('hello')
}
}
func()
Run Code Online (Sandbox Code Playgroud)
我创建了闭包并想检查func函数内部的提升。每次创建函数声明时,它都会将变量提升到顶部。为什么someFunction不吊?
是否有可能在Javascript中检测重复的功能(在某些情况下可能会意外写入)?在Google Chrome中,
printLah(); //this prints "Haha" for some reason, without even printing an error message in the Javascript console!
function printLah(){
alert("Hahah!");
}
function printLah(){
alert("Haha");
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个链接,当点击弹出窗口并显示"联系表单"时.它可以打开,验证,提交和发送电子邮件.当我尝试关闭表单时,我遇到了问题.
HTML
<div id="blanket"><div id="myForm">
<p style="text-align:right; margin: 0; padding: 0;"><a href="#" id="close" onClick="onClickClose();">Close</a></p>
<table width="400" border="0" cellspacing="0" cellpadding="5"><tr><td>
<form name="form1" method="POST" action="_sendmail.php" onSubmit="return CheckAll(this);">
<input name="fieldnm_1" type="radio" value="M." /> M.
<input name="fieldnm_1" type="radio" value="Mme" /> Mme.
</td></tr><tr><td width="400">
<input name="fieldnm_2" type="text" id="left_form" placeholder="Prénom *" tabindex="1"/><input name="fieldnm_4" type="text" id="right_form" placeholder="Courriel *" tabindex="3"/>
</td></tr><tr><td width="400">
<input name="fieldnm_3" type="text" id="left_form" placeholder="Nom *" tabindex="2"/>
<input name="fieldnm_5" type="text" id="right_form" placeholder="Téléphone *" tabindex="4"/>
</td></tr><tr><td width="400">
<select name="fieldnm_7" id="left_list" >
<option value="">Nombre de chambres *</option>
<option …Run Code Online (Sandbox Code Playgroud) 可能重复:
javascript中的delete运算符
我有以下代码.我不明白为什么第二次删除失败.
另外,我注意到foo函数即使在我为foo分配了其他内容之后仍然存在.
有没有办法参考这个功能?
(假设我想要一个bar2=foo()像bar任务一样的行为).
> function foo(){var bar=0; return function(){return bar++;}}
undefined
> bar = foo()
function () {return bar++;}
> bar()
0
> bar()
1
> delete bar
true
> foo = foo()
function () {return bar++;}
> foo()
0
> foo()
1
> delete foo
false
Run Code Online (Sandbox Code Playgroud)
谢谢
可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
我一直在阅读CodeAcademy的Javascript课程,但有些事情已经过去了.我理解函数是如何工作的,我试图围绕OOP和对象/方法.
我的问题是,创建这样的函数有什么区别:
function countTo(number){
for (var i=1; i<=number; i++){
console.log(i);
}
}
countTo(15);
Run Code Online (Sandbox Code Playgroud)
并创建一个这样的函数:
var countToTwo = function(number){
for (var i=1; i<=number; i++){
console.log(i);
}
};
countToTwo(27);
Run Code Online (Sandbox Code Playgroud)
两者都做同样的事情,并具有相同的输出.它们完全相同/可互换吗?在创建函数时使用哪一个是否重要?
function Foo() {
var that = this;
that.bar = function() {}
that.baz = function() {}
(function() {
that.baz();
}());
}
new Foo;
Run Code Online (Sandbox Code Playgroud)
Uncaught TypeError: Object #<Foo> has no method 'baz'
that.bar工作正常,它只是最后一个不存在的功能.;在baz函数定义之后添加一个修复所有内容.
我知道排除;可以弄乱一些事情,但我认为你肯定不应该放弃;功能.没有语言可以做到.为什么;在baz函数之后排除导致此错误?我应该;在我的功能定义之后吗?