分享

js基础

 梦想成为的样子 2017-07-03
1、函数声明和表达式的区别
      关键字function出现在声明中的位置,如果function是声明中的第一个词,那么声明的就是一个函数,否则就是一个函数表达式。
2、立即执行函数表达式
       //立即执行函数表达式
var m=10;
(function foo(){
console.log(m);
})();
由于函数被包含在一对()括号内部,因此成为一个表达式,通过在末尾加上()可以立即执行这个函数,第一个()将函数变成了表达式,第二个()执行了这个函数。
另一种形式:(function(){}()),用来调用的()被移进用来包装的()中。两种方式功能上是一致的。
可以在调用方法的时候传递参数。
(function foo(str){
    console.log(str);
}("womshidkdkkd"));

3、块作用域
       除JavaScript外,很多的编程语言都支持块作用域。块作用域的用处,变量的声明应该距离使用的地方越近越好,并最大限度的本地化。
for(var n=0;n<5;n++){
console.log(n);
var aa="123";
}
console.log(aa+"----"+n);
通常,我们在for循环的头部直接定义了变量n,通常只是因为想在for循环内部的上下文使用n,而忽略了n会被绑定到外部作用域(函数或全局)中的事实。
aa变量仅在if声明的for声明的上下文使用,因此如果将它声明在for块内部中会是一个很有意义的事情。但是,当使用var声明变量时,它写在哪里都是一样的,因为它们最终都会属于外部作用域。
ES6改变了现状,引入了新的let关键字,提供了除var以外的另一种变量声明方式。let关键字可以将变量绑定到所在的任意作用域中(通常是{...}内部)。换句话说,let为其声明的变量隐式所在的块作用域。
1.垃圾收集
一个块作用域非常有用的原因和闭包及垃圾回收机制相关。
 click函数的点击回调并不需要someReallyBigData变量。理论上这意味着当process()执行后,在内存中占用大量空间的数据结构就可以被垃圾回收了。但是,由于click函数形成了一个覆盖整个作用域的闭包,JavaScript引擎极有可能依然保存着这个结构。
块作用域可以打消这种顾虑,可以让引擎清除地知道没有必要继续保存someReallyBigData了。

   2、let循环
 
 3.const
 const同样可以用来创建块作用域变量,但其值是固定的。之后任何师徒修改值的操作都会引起错误。















    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多