ECMAScript/JS 基础知识讲解
闭包
下面这个方法能输入0 1 2 ... 9吗?显然是不可以的,输出结果是10个10。
function test()
{
var arr = [];
for(var i = 0; i < 10; i++)
{
arr[i] = function() {
console.log(i);
}
}
return arr;
}
var arrs = test();
for(var j = 0; j < arrs.length; j++) {
arrs[j]();
}
利用立即执行函数把0到9输出。这种写法没什么意义,还不如直接写个for循环
function test()
{
var arr = [];
for(var i = 0; i < 10; i++)
{
(function()
{
console.log(i)
}(i))
}
}
var arrs = test();
下面这种写法能看懂不,反正我是想不出来的
function test()
{
var arr = [];
for(var i = 0; i < 10; i++)
{
(function(j){
arr[j] = function() {
console.log(j);
}
}(i))
}
return arr;
}
var arrs = test();
for(var j = 0; j < arrs.length; j++) {
arrs[j]();
}
闭包的应用3:可以实现封装,属性私有化
说明:prepareWife不属于Deng的属性,但是能够被方法访问。
//闭包的应用:可以实现封装,属性私有化
function Deng(name, wife) {
var prepareWife = "xiaozhang";
this.name = name;
this.wife = wife;
this.divorce = function() {
this.wife = prepareWife;
}
this.changePrepareWife = function (target) {
prepareWife = target;
}
this.sayPrepareWife = function() {
console.log(prepareWife);
}
}
var deng = new Deng('deng', 'xiaoliu');
this指向
说明:结果是222,最后执行fun()没有对象调用所以是window的name.
var name = "222";
var a = {
name : "111",
say : function() {
console.log(this.name);
}
}
var b = {
name : "333",
say : function(fun) {
// this --> b
// fun没有对象调用,所以是window(GO)
fun();
}
}
b.say(a.say);//222
b.say = a.say;
b.say();//333
深度克隆
// 1.判断是不是原始值 typeof() object
// 2.判读是数组还是对象 instanceof toString constructor
// 3.建立相应的数组或对象(递归)
var obj = {
name : "abc",
age : 14,
card : ['visa', 'master'],
wife : {
name : "abcd",
son : {
name : "aaa"
}
}
}
var obj1 = {}
function deepClone(origin, target){
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object Array]";
for(var prop in origin) {
if(origin.hasOwnProperty(prop)) {
if(typeof(origin[prop] == 'object')) {
if(toStr.call(origin[prop]) == arrStr){
target[prop] = [];
}else{
target[prop] = {};
} deepClone(origin[prop], target[prop]); }else{
target[prop] = origin[prop];
}
}
} }
deepClone(obj, obj1);
ECMAScript/JS 基础知识讲解的更多相关文章
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- Html基础知识讲解
Html基础知识讲解 <title>淄博汉企</title> </head> <body bgcolor="#66FFCC" topmar ...
- HTML+CSS+JS基础知识
HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- 网站开发进阶(十五)JS基础知识充电站
JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
随机推荐
- Unity Shader 效果学习
Unity上对于图像的处理,假设单纯使用代码.那么非常遗憾,程序基本会跑死,毕竟是直接对像素的操作,读取写入都是比較耗费CPU和内存的. 所以.这次由于项目须要想实现类似哈哈镜的效果.想来想去,还是认 ...
- C语言文件操作函数大全(超详细)
C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fc ...
- (一)Oracle学习笔记—— 表和表空间
1. 表空间 一个数据库可以有多个表空间,一个表空间里可以有多个表.表空间就是存多个表的物理空间:可以指定表空间的大小位置等. 1.1 创建表空间语句 create tablespace ts3 d ...
- lua面向对象编程 《lua程序设计》 16章 笔记
Lua中的table就是一种对象,即它拥有状态.拥有独立于其值的标识(self).table与对象一样具有独立于创建者和创建地的征集周期 什么叫对象拥有独立的生命周期? Account = {bala ...
- Android平台Native开发与JNI机制详解
源文链接: http://mysuperbaby.iteye.com/blog/915425 一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这 ...
- CentOS 7 中 Docker 的安装和卸载
安装Dokcer Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: [root@localhost ~]# yu ...
- unity Changing Game View background color
Change the background color in the camera 参考:http://forum.unity3d.com/threads/changing-game-view-bac ...
- Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows
创建基于对话框的Windows应用程序(三) —— Checkbox的应用.窗体置顶.设置图标 上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件.这一节中我们将学习使 ...
- BAT-使用BAT方法设置IP地址
::------以下为批处理文件内容---- @echo off ::set slection1= set/p slection1=请输入IP地址: netsh interface ip set ad ...
- C语言指针解说
指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存 ...