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 ...
随机推荐
- (转)Java线程:新特征-线程池
Java线程:新特征-线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利 ...
- iOS耗电量测试
iOS耗电量测试 本文主要介绍的是使用Energy Diagnostics Instruments来进行iOS耗电量测试. 一.使用方法: 1)iOS 设置选项 ->开发者选项 ->log ...
- 基于脚本的modelsim自动化仿真笔记
这里记录一下基于脚本的modelsim自动化仿真的一些知识和模板,以后忘记了可以到这里查找.转载请标明出处:http://www.cnblogs.com/IClearner/ . 一.基本介绍 这里介 ...
- C#多线程之旅(7)——终止线程
先交代下背景,写<C#多线程之旅>这个系列文章主要是因为以下几个原因:1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的,如果没有用好,容易造成很多问题. ...
- JavaScript语言精粹-读书笔记
前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...
- [补档][Tvyj 1729]文艺平衡树
[Tvyj 1729]文艺平衡树 题目 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结 ...
- OWASP 之 HTML Injection
Summary HTML injection is a type of injection issue that occurs when a user is able to control an in ...
- Fliptile 翻格子游戏[Usaco2007 Open]
题目描述 Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. ...
- 用户单独管理Jenkins的某些项目
管理用户: 建立用户: 安装Role-Based Strategy插件 安装插件后,进入系统设置页面,配置如下: 在系统管理页面点击Manage and Assign Roles进入角色管理页面: 1 ...
- Java面试题大全
前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...