Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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_Function - Fatal编程技术网

Javascript 感叹号在函数之前做什么?

Javascript 感叹号在函数之前做什么?,javascript,function,Javascript,Function,它返回语句的计算结果是否为false。例如: !function () {}(); 可以使用它两次将值强制为布尔值: !false // true !true // false !isValid() // is not valid 因此,要更直接地回答您的问题: !!1 // true !!0 // false 编辑:它的副作用是将函数声明更改为函数表达式。例如,以下代码无效,因为它被解释为缺少所需标识符(或函数名称)的函数声明: 它返回语句的计算结果是

它返回语句的计算结果是否为false。例如:

!function () {}();
可以使用它两次将值强制为布尔值:

!false      // true
!true       // false
!isValid()  // is not valid
因此,要更直接地回答您的问题:

!!1    // true
!!0    // false
编辑:它的副作用是将函数声明更改为函数表达式。例如,以下代码无效,因为它被解释为缺少所需标识符(或函数名称)的函数声明:


它返回语句的计算结果是否为false。例如:

!function () {}();
可以使用它两次将值强制为布尔值:

!false      // true
!true       // false
!isValid()  // is not valid
因此,要更直接地回答您的问题:

!!1    // true
!!0    // false
编辑:它的副作用是将函数声明更改为函数表达式。例如,以下代码无效,因为它被解释为缺少所需标识符(或函数名称)的函数声明:

职能:

function () { return false; }();  // syntax error
不返回任何内容(或未定义)

有时,我们希望在创建函数时正确调用它。您可能会尝试以下方法:

function () {}
但它会导致一个
语法错误

使用
运算符,因此我们可以调用它:

function () {}()
这也将返回与函数返回值相反的布尔值,在本例中为
true
,因为
!未定义的
。如果希望实际返回值是调用的结果,请尝试以下方法:

!function () {}()
职能:

function () { return false; }();  // syntax error
不返回任何内容(或未定义)

有时,我们希望在创建函数时正确调用它。您可能会尝试以下方法:

function () {}
但它会导致一个
语法错误

使用
运算符,因此我们可以调用它:

function () {}()
这也将返回与函数返回值相反的布尔值,在本例中为
true
,因为
!未定义的
。如果希望实际返回值是调用的结果,请尝试以下方法:

!function () {}()

JavaScript语法101。下面是一个函数声明

(function () {})()
请注意,没有分号:这只是一个函数声明。您需要一个调用,
foo()
,才能实际运行该函数

(function(){})();
现在,当我们添加看似无害的感叹号时:
!函数foo(){}
将其转换为表达式。它现在是一个函数表达式

!function bool() { return false; }() // true
!function bool() { return true; }() // false
本身并不能调用函数,但我们现在可以将
()
放在末尾:
!函数foo(){}()
,其优先级高于
并立即调用该函数

(function(){})();
因此,作者所做的是为每个函数表达式保存一个字节;更具可读性的书写方式是:

function foo() {}

最后,
使表达式返回true。这是因为默认情况下,所有立即调用的函数表达式(IIFE)都返回未定义的
,这给我们留下了
!未定义
,即
为真
。不是特别有用。

JavaScript语法101。下面是一个函数声明

(function () {})()
请注意,没有分号:这只是一个函数声明。您需要一个调用,
foo()
,才能实际运行该函数

(function(){})();
现在,当我们添加看似无害的感叹号时:
!函数foo(){}
将其转换为表达式。它现在是一个函数表达式

!function bool() { return false; }() // true
!function bool() { return true; }() // false
本身并不能调用函数,但我们现在可以将
()
放在末尾:
!函数foo(){}()
,其优先级高于
并立即调用该函数

(function(){})();
因此,作者所做的是为每个函数表达式保存一个字节;更具可读性的书写方式是:

function foo() {}

最后,
使表达式返回true。这是因为默认情况下,所有立即调用的函数表达式(IIFE)都返回未定义的
,这给我们留下了
!未定义
,即
为真
。不是特别有用。

感叹号使任何函数始终返回布尔值。
最后一个值是函数返回值的求反

(function(){})();
省略
将是一个语法错误

!function bool() { return false; }() // true
!function bool() { return true; }() // false
然而,实现这一目标的更好方法是:

function bool() { return true; }() // SyntaxError

感叹号使任何函数始终返回布尔值。
最后一个值是函数返回值的求反

(function(){})();
省略
将是一个语法错误

!function bool() { return false; }() // true
!function bool() { return true; }() // false
然而,实现这一目标的更好方法是:

function bool() { return true; }() // SyntaxError

使用
有一个很好的理由

一般来说,在单独的文件(aka模块)上使用这种技术是一个好主意,这些文件后来被连接起来。这里需要注意的是,文件应该由将新文件放在新行的工具连接起来(这对于大多数concat工具来说都是常见的行为)。在这种情况下,请使用
将有助于避免前面连接的模块遗漏尾随分号时出现错误,但这将提供将它们按任意顺序排列的灵活性,而无需担心

(function bool() { return true; })() // true
工作原理与

!function abc(){}();
!function bca(){}();
但保存一个字符和任意的外观更好

顺便说一句,
+
-
~
void
操作符中的任何一个在调用函数方面都具有相同的效果,可以肯定的是,如果您必须使用某个东西从该函数返回,它们的行为会有所不同

!function abc(){}();
(function bca(){})();
但如果您使用IIFE模式进行一个文件一个模块的代码分离,并使用concat工具进行优化(这使得一行一个文件工作),那么构建

abcval = !function abc(){return true;}() // abcval equals false
bcaval = +function bca(){return true;}() // bcaval equals 1
zyxval = -function zyx(){return true;}() // zyxval equals -1
xyzval = ~function xyz(){return true;}() // your guess?
将执行安全代码执行