发表于: 2017-06-13 22:06:07
1 1171
今日所做:
1.学习一下函数表达式,函数声明,闭包等的基础知识
2.两种函数定义想要达到立即执行效果的区别:
实际上来说在函数后面直接加()不是都可以立即执行的,函数定义分为
函数声明和函数表达式,函数声明的时候会产生声明提前,函数表达式不会;
那么想要立即让函数执行,实际上只能是在函数表达式后面加()才可以,
而且是这种函数表达式var a=function(){}()不能是匿名函数表达式
function(){}()这种会报错,提示函数未赋值,但是!但是!但是!
除了最正归的写法,换一些其他的写法还是可以让这几种函数定义都立即执行
,最简单的就是在函数声明的前面加上!、+、-、=等等符号,例如 +function(){}()
这样就会立即执行了,这是因为在函数声明前面加了符号,js解析器就解析不出来了,
它就不知道它是个函数声明了,同理,在把函数整体包裹在括号里就更可以立即执行了,
()的另一个好处是不会对值产生不想要的改变,所以一般都会用();
3.
+function (){
console.log(333)
}()/*333*/
!function aa(){
console.log(555);
}()/**555/
类似于上图,这种情况下直接加()都是可以立即执行的
4.使用立即执行的一个好处在于可以在里面定义函数,这些定义的函数在全局作用域中
访问不到,可以起到不污染全局作用域的效果
明日计划:
继续学习一下函数部分的基础知识
遇到的问题:
把变量放在立即执行的函数中定义,使得从外部访问不到函数中的变量,这样既保护了函数
又不会污染全局作用域,但是这些定义的变量不是也没法去使用了吗
今日收获:
对函数的基础知识有了更加深入的了解
评论