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 ...
随机推荐
- windows系统下GCC的安装与配置
刚开始看 C++ Primer,看到编译器的部分,自己搜了搜怎么搭建GCC,搜到以下内容,复制过来留个印象: windows系统下GCC的安装方法,以及一些环境变量的配置,如果对GCC不是很清楚,关于 ...
- 【c语言】不用大与小与号,求两数最大值
// 不用大与小与号,求两数最大值 #include <stdio.h> int max(int a, int b) { int c = a - b; int d = 1 << ...
- 图片扩展---基于opencv-python实现
目标: 将一张长方形图片扩展成一张正方形图片,例如: 200x300x3的一张图片扩展成一张300x300x3的图片,填充部分使用白色. 代码: import cv2 import os imglis ...
- Silverlight实例教程 - Validation数据验证基础属性和事件(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- SpringCloud系列十一:自定义Feign
1. 回顾 上文我们讲解了如何为服务消费者配置Feign. 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码 ...
- strex,ldrex
volatile bool lock = false; void func(void) { int i; while(lock); lock = true; for(i = 0; i < 4 ...
- Django中的request对象组成
if request.REQUEST.has_key('键值'): HttpRequest对象的属性 参考: 表 H-1. HttpRequest对象的属性 属 性 描述 path 表示提 ...
- java json字符串和对象互转
/** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String ...
- iOS valueForKeyPath快速计算求和、平均值、最大、最小
iOS中开始取出数组中最大值,最小值除了使用排序的方式,还可以使用valueForKeyPath的方式直接取出 array = @[@(10),@(100),@(20),@(97)]; CGFloat ...
- UI-7-UIScrollView
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> { UIIm ...