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 ...
随机推荐
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎
序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...
- 回味Python2.7——笔记4
一.Python 标准库概览 1.操作系统接口 os 模块提供了很多与操作系统交互的函数: >>> import os >>> os.getcwd() # Retu ...
- Swift 轻量级网络层设计
前言 普遍我们的网络层设计的时候直接是如下结构APIManager.post(url, parameter,completeHandle),服务器配置在APIManager.m文件中进行配置.这样一个 ...
- iBatis一些非见用法(相当实用)
兼顾效率,iBatis一些非见用法(10条) 2009-09-18 10:33:03 标签:iBatis 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声 ...
- 相对路径&绝对路径
粗浅理解: 1)绝对路径:带有访问协议的路径,就是带上http访问协议 2)相对路径: ①以带斜杠开头的相对路径: A)前台相对路径:以web服务器的根路径为参照路径,比如在jsp.HTML中写的路径 ...
- Android 类似duplicate entry: android/support/v4/internal/view/SupportSubMenu.class问题解决办法汇总
这种问题一般是v4或者v7包版本不一致导致的. 一般情况下进行在你的工程的入口module的build.gradle 的android标签下defaultConfig子标签中 添加如下的配置就能解决. ...
- Canvas 仿百度贴吧客户端 loading 小球
前言 几天前在简书上看到在一篇文章<Android仿百度贴吧客户端Loading小球>,看了一下作者,他写了两个好玩的 demo,效果图如下: 今天趁着周末有空,用 H5 的 Canvas ...
- 【 js 基础 】【 源码学习 】backbone 源码阅读(一)
最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...
- 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)
第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...