javascript if block 的奇怪行为
Javascript weird behaviour of if block
在javascript中声明函数时,我遇到了这种奇怪的行为。我无法理解原因。谁能解释一下。
if ( true ) {
function myFun() {
alert( "true block" );
}
} else {
function myFun() {
alert( "false block" );
}
}
myFun();
它显示错误阻止的警报!!
阅读有关 JavaScript 提升的信息
变量声明和函数声明被提升到 JavaScript 中当前作用域的开头。
这可以通过更好地理解,
/*hoisting will make the definitions look like this*/
function myfunc() { x = 10; } <------
|
function myfunc() { x = 20; } <-----|----
| |
if(true){ | |
function myfunc() {x = 10;} ------- |
} |
else{ |
function myfunc() {x = 20;} -----------
}
myfunc();
alert(x);
警报将始终触发 20。 因为第二个定义覆盖第一个定义。
这是因为myFun
功能被提升了。你永远不应该在 if 语句中声明这样的函数。改为检查函数中是否true
了某个变量。
吊装:http://www.w3schools.com/js/js_hoisting.asp
Javascript中没有块级范围。在 if 块中声明的所有变量实际上都被吊装起来了。因此,当你编写 if else 时,实际的函数变量myFun
else 块中被覆盖并被提升。
在范围界定和提升过程中,您的函数myFun被覆盖,因此要避免这种行为,请尝试此操作
var myFun;
if ( true ) {
myFun= function(){
alert( "true block" );
}
} else {
myFun = function() {
alert( "false block" );
}
}
myFun();
如果要动态分配 myFun,则应使用以下语法
if (true) {
myFun=function(){alert('true');}
}else{
myFun=function(){alert('false');}
}
myFun();
因为如果您使用的是 function MyFun()
声明样式,则该函数是在解析时定义的,而不是您想要的 runtimr。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如果 a 为 false,则 if(a) === if(false)
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 正在尝试使用if和else添加类,但无法正常工作
- 在PHP中使用javascript更改页面标题'if'
- gulp-if-javascript文件,但不在gulp-useref的特定目录中
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- 什么是&&在没有if的行中的变量之间
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- Sharepoint JScript if语句未执行
- Javascript:If-then语句在函数中不起作用
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 对于loop.if-仅在经过所有间隔后返回true
- Javascript Return and if/else
- Javascript nested if
- javascript if block 的奇怪行为
- if($(var).css('display') == "block") with