javascript一些比较难理解的知识点
原文出处:https://segmentfault.com/a/1190000010371988
看了一下这篇文章,自己也手敲了一遍
//1、 立即执行函数 作用:将var变量的作用域限制于函数内,这样可以避免命名冲突。注意:避免报错 在开头加分号
;
(function() {
console.log("1、立即执行函数")
})()
//2、闭包
;
(function() {
console.group("2、闭包")
function f1() {
var n = 0
function f2() {
n++
console.log("n=" + n)
}
return f2
}
var result = f1()
try {
console.log(n) //undefind
} catch(e) {
// console.log(e)
}
result() //输出1
result() //输出2
result() //输出3
console.groupEnd()
})()
//3、使用闭包定义私有变量
;
(function() {
console.group("3、使用闭包定义私有变量")
function Pronduct() {
// this.name = "mike";
var name
this.setName = function(v) {
name = v
}
this.getName = function() {
return name
}
}
var k = new Pronduct()
k.setName('amy')
console.log(k.name) //undefined
console.log(k.getName()) //输出amy
console.groupEnd()
})()
//4、prototype
//每个JavaScript构造函数都有一个prototype属性,用于设置所有实例对象需要共享的属性和方法。
//prototype属性不能列举。JavaScript仅支持通过prototype属性进行继承属性和方法。
;
(function() {
console.group("4.prototype")
function Rectangle(x, y) {
this._length = x;
this._breadth = y;
}
Rectangle.prototype.getData = function() {
return {
length: this._length,
breadth: this._breadth
}
}
var x = new Rectangle(3, 4);
var y = new Rectangle(5, 8);
console.log(x.getData()) //输出{length:3,breadth:4}
console.log(y.getData()) //输出{length:5,breadth:8}
console.groupEnd()
})()
//5、模块化
;
(function() {
console.group("5.模块化")
var module = (function() {
var N = 5;
function print(x) {
console.log("The result is:" + x)
}
function add(a) {
var x = a + N;
print(x)
}
return {
description: "This is descriptione",
add: add
}
})()
console.log(module.description) //输出 "This is descriptione"
module.add(5) //输出 The result is:10
console.groupEnd()
})()
//6.变量提升
//JavaScript会将所有变量和函数声明移动到它的作用域的最前面,这就是所谓的变量提升(Hoisting)。
//也就是说,无论你在什么地方声明变量和函数,
//解释器都会将它们移动到作用域的最前面。因此我们可以先使用变量和函数,而后声明它们。
//7、柯里华
//柯里化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;
//也可以只传入一部分参数来调用它,让它返回一个函数去处理剩下的参数。
;
(function() {
console.group('7.柯里华')
var add = function(x) {
return function(y) {
return x + y;
}
}
console.log(add(1)(1)) //输出2
var add1 = add(1)
console.log(add1(2)) //输出3
var add10 = add(10)
console.log(add10(2)) //输出12
console.groupEnd()
})()
//8.apply,call与bind方法
//call 指定this值调用函数
;
(function() {
console.group('8.apply,call与bind方法')
var user = {
name: "mike",
whatIsYourName: function() {
console.log(this.name)
}
}
console.group("call")
user.whatIsYourName() //输出 mike
var user2 = {
name: "amy"
}
user.whatIsYourName.call(user2) //输出amy
console.groupEnd()
//apply apply方法与call方法类似。两者唯一的不同点在于,apply方法使用数组指定参数,而call方法单独指定:
;
(function() {
console.group('apply')
var user = {
greet: "hello",
greetUser: function(userName, name) {
console.log(this.greet + " " + userName + ' ' + name)
}
}
var user2 = {
greet: "hey"
}
user.greetUser.call(user2, 'mike', "ak") //输出 hey mike ak
user.greetUser.apply(user2, ['amy', "ak"]) //输出 hey amy ak
console.groupEnd()
})()
//bind
;
(function() {
console.group('bind')
var user = {
greet: "Hello!",
greetUser: function(userName) {
console.log(this.greet + " " + userName);
}
};
var greetHola = user.greetUser.bind({
greet: "Hola"
});
var greetBonjour = user.greetUser.bind({
greet: "Bonjour"
});
greetHola("Rahul") // 输出"Hola Rahul"
greetBonjour("Rahul") // 输出"Bonjour Rahul"
user.greetUser('mike')
console.groupEnd()
})()
})()
javascript一些比较难理解的知识点的更多相关文章
- K8S核心概念之SVC(易混淆难理解知识点总结)
本文将结合实际工作当中遇到的一些问题和情况来解析SVC的作用以及一些比较易混淆和难理解的概念,方便日后工作用到或者遗忘时可以直接在自己曾经学习总结的博客当中直接查找到. 首先应该清楚SVC的作用是什么 ...
- 对JavaScript闭包和原型理解
最近在学js脚本的一些东西觉得里面有2个知识点比较难理解所以做了如下总结. 1.闭包 简单的理解:一个函数a ,内部有个函数b,那么这个函数b当被作为a函数的返回值得时候被外部的全局变量引用了,那么这 ...
- 关于对JavaScript待于完善的一些知识点
学习JavaScript也存在一段时间,以下是个人对JavaScript中抽象的知识点记录备案,将有待于后面逐个完善...... 1.JavaScript在内存中的体现(内存中栈堆与基本类型及引用类型 ...
- JavaScript闭包的深入理解
闭包算是javascript中一个比较难理解的概念,想要深入理解闭包的原理,首先需要搞清楚其他几个概念: 一.栈内存和堆内存 学过C/C++的同学可能知道,计算机系统将内存分为栈和堆两部分(大学的基础 ...
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
1.2017前端面试题及答案总结 |掘金技术征文 "金三银四,金九银十",用来形容求职最好的几个月.但是随着行业的饱和,初中级前端er就业形势不容乐观. 行业状态不可控,我们能做的 ...
- 对JavaScript中闭包的理解
在前端开发中闭包是一个很重要的知识点,是面试中一定会被问到的内容.之前我对闭包的理解主要是"通过闭包可以在函数外部能访问到函数内部的变量",对闭包运用的也很少,甚至自己写过闭包自己 ...
- Javascript中的Form表单知识点总结
Javascript中的Form表单知识点总结 在HTML中,表单是由form元素来表示的,但是在javascript中,表单则由HTMLFormElement类型,此元素继承了HTMLElement ...
- 转:对JavaScript中闭包的理解
关于 const let var 总结: 建议使用 let ,而不使用var,如果要声明常量,则用const. ES6(ES2015)出现之前,JavaScript中声明变量只有 ...
- JavaScript闭包函数的理解
闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...
随机推荐
- win10下python2与python3以及pip共存
一 分别安装python2和python3 注意: 安装时记得勾选 Add Python.exe to Path 二 安装pip Python3最新版本有pip,无需安装 Python2: 下载pip ...
- hdu_3746: Cyclic Nacklace
题目链接 给出一个字符串,你可以通过在首尾加入字符使其变成一个具有周期T(T>=2)的字符串,求所需加入的最少字符数. 所考察算法仍然是对next数组含义的理解 #include<cstd ...
- python之总体理解
作为脚本,python具备了弱类型语言的灵活性,便捷性.这在日常的开发使用中能够大幅度的减轻开发人员的编码负担,开发者也能够将精力集中在程序的逻辑管理和总体构架设计上.一般而言,随着经验的积累,开发人 ...
- 苹果APP发布
1 发布方式 苹果发布上架有两种方式,一种是上传到苹果商店,一种是挂在web服务器上扫描下载,下面分别介绍这两种发布方式 1.1 上传AppStore 1. 用公司账号或者个人开发账号生成上架.p12 ...
- (转)SimpleDateFormat使用详解
1 SimpleDateFormat 介绍 public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格 ...
- [补档]暑假集训D7总结
刷题 上午刷了一上午的网络流 (md建图快建吐了),然后就搞了一个网络流的索引= = (实在看不下去那篇大长文了啊喂),然后发现都是水题= =,我还瞎××乱刷 下午--听说我要刷平衡树? Blog 日 ...
- POJ2236 Wireless Network 并查集简单应用
Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...
- 拯救莫莉斯[GDOI2014]
时间限制:1s 内存限制:256MB 问题描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标 ...
- 兔子与樱花[HEOI2015]
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- centos7安装docker并安装jdk和tomcat(常用命令)
阿里专属的镜像加速 在宿主机器编辑文件:vi /etc/docker/daemon.json 阿里专属的镜像加速地址,类似于"https://91cntlkt.mirror.aliyuncs ...