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 ...
随机推荐
- C++中使用const修饰指针
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...
- xdu_1077:循环节长度
题意很简单,就是给出p,q,求p/q的循环节长度. 由循环小数的循环部分的值等于等比数列求和的值S,列公式得到最简分数分母的值.最终得10^x%q==1(其中q为经过modify之后的值).搞清这些之 ...
- (转)java提高篇(一)-----理解java的三大特性之封装
从大二接触java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...
- (转)搬瓦工(bandwagonhost)后台管理VPS
1. Bandwagonghost使用建议 购买了搬瓦工(bandwagonhost)的VPS,如何使用呢? 首先插几句使用建议,老高认为十分重要,为什么呢?搬瓦工如果监控到有大量的垃圾信息从我们的主 ...
- JS组件系列——在ABP中封装BootstrapTable
前言:关于ABP框架,博主关注差不多有两年了吧,一直迟迟没有尝试.一方面博主觉得像这种复杂的开发框架肯定有它的过人之处,系统的稳定性和健壮性比一般的开源框架肯定强很多,可是另一方面每每想到它繁琐的封装 ...
- mac上安装kali2.0 pdtools
备注下: 操作--安装parallers tools 弹出cdrom 将其复制到一个文件夹 然后运行./install 会提示权限不够,执行chmod -R 777 . 再执行安装 会开始下载缺少的库 ...
- 兔子与樱花[HEOI2015]
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- metasploit快速入门
今天没上班,在小黑屋里看了一个一百多页的书<metasploit新手指南>,在此将笔记分享给大家.欢迎大家批评指正,共同学习进步. metasploit新手指南 笔记 kali 0 ...
- 暑假OI规划
为了准备11月的NOIP(最好能到550+)暑假要认真的刷题: 1.NOIP的原题 2.USACO历年的GOLD 3.CF的比赛 4.刷几本书 5.带着做bzoj(lydsy) 6.少玩游戏
- NYOJ--102--次方求模(快速求幂取模)
次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...