在书签脚本中看到 javascript:!function(){}(); 这样的写法,整理了一下其中涉及的知识点。

知识点 1:匿名函数

常规的函数定义写法:

function aaa(){
  doSomeThing();
}

f = aaa;
bbb(aaa);

//匿名函数写法
f = function(){doSomeThing();};
bbb(function(){doSomeThing();});

匿名函数写法:

function(){
  doSomeThing();
}
f = function(){doSomeThing();};
bbb(function(){doSomeThing();});

对于书签脚本这种需要尽量缩短代码长度,且函数代码不会被多处复用的情况,匿名函数就很合适。

当然还有更短的箭头函数:

() => {doSomeThing();}

知识点 2:立即执行函数

在函数声明 function(){}后面加 (),意思是执行这个函数声明。

「立即执行函数」 也称 「自动执行函数」 。

aaa();
f = aaa;
f();
(function aaa(){})();
(function(){})();

立即执行函数要求前面那一部分必须是一个表达式,所以下面这种写法会报错:

function(){}();

所以最直观的方法就是用括号把函数声明的部分括起来:

(function(){})();

知识点 3:凑成表达式的多种方法

最直观的是用括号,但是用一元运算符也行,比如书签脚本中的感叹号:

(function(){})();
!function(){}();
~function(){}();

参考

  1. JS 中 [感叹号]function(){}() 的理解_js 里面括号后面的感叹号_zhangge3663 的博客-CSDN 博客
  2. js 前加感叹号是什么意思?比如 !function(){}(); 答案在这里_js 字符串前面加感叹号_SleepingBug 的博客-CSDN 博客
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论