博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript函数表达式
阅读量:7255 次
发布时间:2019-06-29

本文共 2595 字,大约阅读时间需要 8 分钟。

函数声明

函数声明提升

函数表达式

匿名函数/拉姆达函数

 

1 递归

2 闭包(有权访问另一个函数作用域中的变量的函数)

2.1 闭包与变量

闭包只能取得包含函数中任何变量的最后一个值。

function createFunctions() {    var result = new Array();    for (var i = 0; i < 10; i++) {        result[i] = function() {            return i;        }    }    return result;} // 结果返回10个10;

可以通过创建另一个匿名函数强制让闭包的行为符合预期(但是感觉有点蠢而且容易乱)

function createFunctions() {    var result = new Array();    for (var i = 0; i < 10; i++) {        result[i] = function(num) {            return function() {                return num;            }        }    }}

2.2 关于this对象

匿名函数的执行环境具有全局性,通过call()或apply()改变函数执行环境的情况下,this就会指向其他对象。

var name = "The Window";var object = {    name: "My Object",    getNameFunc: function() {        return function() {            return this.name;        }    }};alert(object.getNameFunc()()); //"The Window"(在非严格模式下)

2.3 内存泄漏

如果闭包的作用域链中保存着一个html元素,将会导致该元素无法被销毁。

function assignHandler() {    var element = document.getElementById("someElement");    var id = element.id;    element.onclick = function() {        alert(id);    };    //Important!!!    element = null;}

 

3 模仿块级作用域

JavaScript没有块级作用域的概念。

function outputNumbers(count) {    for (var i=0; i < count; i++) {        alert(i);    }    alert(i); //计数}

匿名函数可以用来模仿块级作用域。

(function() {    // 这里是块级作用域})();
function() {    }(); //出错!

 

4 私有变量

JavaScript中并没有私有成员的概念,所有对象属性都是公有的。

有权访问私有变量和私有构造函数的公有方法被称为特权方法。

function MyObject() {    //私有变量和私有函数    var privateVariable = 10;    function privateFunction() {        return false;    };    this.publicMethod = function() {        privateVariable++;        return privateFunction();    };}

4.1 静态私有变量

(function() {    //私有变量和私有函数    var privateVariable = 10;    function privateFunction() {        return false;    }    MyObject = function() {    };    MyObject.prototype.publicMethod = function() {        privateVariable++;        return privateFunction();    };})();

4.2 模块模式

var singleton = function() {    //私有变量和私有函数    var privateVariable = 10;    function privateFunction() {        return false;    }    return {        publicProperty: true,        publicMethod: function() {            privateVariable++;            return privateFunction();        }    };};

4.3 增强的模块模式

var singleton = function() {    //私有变量和私有函数    var privateVariable = 10;    function privateFunction() {        return false;    }    //创建对象    var object = new CustomType();    //添加特权/公有属性和方法    object.publicProperty = true;    object.publicMethod = function() {        privateVariable++;        return privateFunction();    };    //返回这个对象    return object;};

 

转载于:https://www.cnblogs.com/easybreezy/p/9159158.html

你可能感兴趣的文章
Hadoop源代码eclipse编译指南
查看>>
PCL中可用的PointT类型
查看>>
操作系统历史回顾
查看>>
网络设备主备配置系列3:华为防火墙(路由模式)
查看>>
Pacemaker+Corosync PostgreSQL流复制HA的部署(pha4pgsql)
查看>>
CCNA--点对点协议(PPP)
查看>>
逐步创建Data Guard
查看>>
OpenStack icehouse系列之计算节点搭建
查看>>
Juniper 重置设备到出厂缺省设置
查看>>
todo:DSB and ISB
查看>>
BGP选路进程
查看>>
Nginx + PHP/PHP-FPM安装配置示例
查看>>
Linux学习笔记之三
查看>>
HttpRunner环境部署-踩坑篇
查看>>
关于mysql的ddl_log.log文件
查看>>
修改CMD设置使其支持鼠标选择复制
查看>>
hexo 博客支持PWA和压缩博文
查看>>
写给MongoDB开发者的50条建议Tip6
查看>>
swift UI专项训练4 场景过渡-转场
查看>>
vmware vms migration to openstack
查看>>