js

js闭包

余生颓废 提交于 2020-03-08 01:09:26
​ 今天呢咱们来聊聊这个js闭包,我们基本上在面试中,必然会问到的问题:什么是闭包?说说你对闭包的理解.闭包的作用是什么? ​ 闭包也是一个很不好理解的概念,往往我们遇到的机会很多很多,很多朋友呢都说了对闭包的理解,问题表达的方式不一样,但是呢,最后都对闭包没有很清晰的理解.所以呢我这边就帮助大家理解什么是闭包.其实说起来,可以深,也可以浅.先由浅着说.之前呢,在网上也是找了不少的资料,看见人家理解的闭包,我提取出了说法有问题 的4点: ​ 1.闭包是指有权访问另一个函数作用域中变量(参数)的函数(不可取) ​ 2.闭包就是能读取其他函数内部变量的函数(不可取) ​ 3.闭包可以理解成定义一个函数内部的函数(不可取) ​ 4.函数就是闭包(不可取) ​ 这4点呢,其实呢,怎么说呢,不能否认它是错的,只能说不严谨,第一点,可以得到一个结论,闭包是一个函数,第二点也差不多的意思,第三点有意思了,定义一个函数内部的函数,的确有这个特征,而第四点,其实也是对的,因为MDN上的解释是:闭包是一个特殊的函数对象.那上面的几种说法都是不严谨的,其实最终我查询资料,都归纳了一句话: ​ 当一个函数能够记住并访问到其所在的词法作用域及作用域链,特别强调是在其定义的作用域外进行的访问,此时该函数和其上层执行上下文共同构成闭包 ​ 怎么理解这句话呢,其中包含两个新的名词,词法作用域及作用域链

JS之Cookie、localStorage与sessionStorage

…衆ロ難τιáo~ 提交于 2020-03-07 22:56:35
基本概念: cookie:是指Web浏览器存储的少量数据,同时它是与具体的Web页面或者站点相关的。 localStorage:用于长期保存整个网站的数据,保存的数据没有过期时间,直到手动删除。属性是只读。 sessionStorage:用于临时保存同一个窗口(或标签页)的数据,在关闭窗口或者标签页之后将删除这些数据。 直接上图看三者的区别与相同点 localStorage与sessionStorage存储API localStorage.setItem('x' ,1) // 以'x'为名字存储一个数值 localStorage.getItem('x') //获取数值 localStorage.removeItem('x') // 删除'x'项 localStorage.clear() // 全部删除 cookie的使用 JavaScript可以使用document.cookie属性来创建、读取及删除cookie. var x = document.cookie; // 读取 tips: document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT;

js中window.location.search的用法和作用

我与影子孤独终老i 提交于 2020-03-07 22:19:23
用该属性获取页面 URL 地址: window.location 对象所包含的属性 属性 描述 hash 从井号 (#) 开始的 URL(锚) host 主机名和当前 URL 的端口号 hostname 当前 URL 的主机名 href 完整的 URL pathname 当前 URL 的路径部分 port 当前 URL 的端口号 protocol 当前 URL 的协议 search 从问号 (?) 开始的 URL(查询部分) 如图就是取出url中的参数。 js 脚本捕获页面 GET 方式请求的参数?其实直接使用 window.location.search 获得,然后通过 split 方法结合循环遍历自由组织数据格式。 大概处理如下: var searchURL = window.location.search; searchURL = searchURL.substring(1, searchURL.length); var targetPageId = searchURL.split("&")[0].split("=")[1];    来源: https://www.cnblogs.com/jkr666666/p/7456133.html

手把手教你如何开发chrome插件

泪湿孤枕 提交于 2020-03-07 21:08:03
手把手教你如何开发chrome插件 不管是做web开发还是做测试, 对于chrome我想大家都非常的熟悉不过了, 说到chrome的插件很多都觉得很神奇,今天我将带领大家一起来探讨如何开发chrome插件, 让你的应用也可以跑在chrome上面 在开发之前我们先来了解一下一些基础知识 chrome扩展文件 chrome扩展文件都是以.crx为后缀名, 在google chrome扩展官网上下载扩展时,chrome会将.crx文件下载到chrome的application data文件下我本地的是C:\Users\AppData\Local\Google\Chrome\Application, 安装完成或者取消安装, 该文件都会被删除,.crx实际上是一个压缩文件, 我们来看一下gmail.crx里面的内容: 实际上就是一个web应用,只不过是安装chrome的规定方式开发而已 2. Browser Actions(扩展图标),如下图所示的为扩展图标: 动手写一个插件 1.新建一个文件夹名字叫MyFirstChromePlugins,在文件夹下新建manifest.json内容为: { "name": "MyFirstChromePlugins", "version": "0.9.0", "manifest_version": 2, "description":

手把手教你如何开发chrome插件

我与影子孤独终老i 提交于 2020-03-07 21:00:55
手把手教你如何开发chrome插件 不管是做web开发还是做测试, 对于chrome我想大家都非常的熟悉不过了, 说到chrome的插件很多都觉得很神奇,今天我将带领大家一起来探讨如何开发chrome插件, 让你的应用也可以跑在chrome上面 在开发之前我们先来了解一下一些基础知识 chrome扩展文件 chrome扩展文件都是以.crx为后缀名, 在google chrome扩展官网上下载扩展时,chrome会将.crx文件下载到chrome的application data文件下我本地的是C:\Users\AppData\Local\Google\Chrome\Application, 安装完成或者取消安装, 该文件都会被删除,.crx实际上是一个压缩文件, 我们来看一下gmail.crx里面的内容: 实际上就是一个web应用,只不过是安装chrome的规定方式开发而已 2. Browser Actions(扩展图标),如下图所示的为扩展图标: 动手写一个插件 1.新建一个文件夹名字叫MyFirstChromePlugins,在文件夹下新建manifest.json内容为: { "name": "MyFirstChromePlugins", "version": "0.9.0", "manifest_version": 2, "description":

JS 相关记录(scrollTo,JSON)

早过忘川 提交于 2020-03-07 18:57:04
1. window.scrollTo window.scrollTo 有2种语法,比较常见的时候 window.scrollTo(x -coord , y-coord ) ,其中 x轴坐标与y坐标 第二种为 window.scrollTo(options) (自带动画效果哦) top 等同于 y-coord left 等同于 x -coord behavior 类型String,表示滚动行为,支持参数 smooth(平滑滚动),instant(瞬间滚动),默认值auto,实测效果等同于instant 2.JSON: 首先声明一点: JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同: JavaScript不是JSON,JSON也不是JavaScript 。 JSON 的标准:   1.在转换过程parse 中字符中最后一个属性不能有,   2.不要带有前导0,否则parse会抛出 SyntaxError 异常。如果有小数点最好后面跟着一个数字   3.只有有限的一些字符可能会被转义;禁止某些控制字符; Unicode 行分隔符 ( U+2028 )和段分隔符 ( U+2029 )被允许 ; 字符串必须用双引号括起来 。 let code = '"\u2028\u2029"'; JSON.parse(code

浏览器执行js原理

和自甴很熟 提交于 2020-03-07 18:45:00
在js任务循环机制中,为什么会有宏任务与微任务之分? 是不是大都数前端开发者都会有这样的疑惑,确实,我自己在开发的过程中每次碰到promise,setTimeout,requestAnimationFrame都会去想,在这个执行的过程中到底发生了什么? 解析: 在前端执行一系列任务的时候,渲染进程会创建一个消息队列,在这个消息队列里存放着待执行的任务函数,按照先进先出的原则,依次执行任务函数。因此只要消息队列里有任务,JS执行主线程就会不断的执行消息队列里的任务。这便是js单线程执行js代码的简单原理,当然涉及的深的话,应该还要有IO线程,专门处理新加进来的任务,以及其它进程过来的任务。 但是js执行过程作为一个单线程的执行过程,其实是有缺点的。上面说过了,消息队列是“先进先出”的属性,也就是说放入队列中的任务,需要等待前面的任务被执行完,才会被执行。鉴于这个属性,那js是如何处理高优先级的任务? js是如何处理高优先级的任务? 比如一个典型的场景,DOM节点的变化,增、删,改,如果页面上的一个输入框状态需要实时的映射到页面上。一个通用的设计的是,利用 JavaScript 设计一套监听接口,当变化发生时,渲染引擎同步调用这些接口,这是一个典型的观察者模式,即给这个输入框添加一个变化事件的监听。 但是这个模式有一个问题,就是如果当前的DOM变化非常的频繁,都去执行js任务的话

iOS中UIWebView与其中网页的javascript的交互

守給你的承諾、 提交于 2020-03-07 17:42:40
首发: 个人博客,更新&纠错&回复 1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句 2. 但js调本地语言,则不是像android那样直接调一个全局变量的方法,而是通过location.href=xx://yy这样的方式触发UIWebViewDelegate接口实现者的webView shouldStartLoadWithRequest navigationType方法,该方法应该判断目标路径(即xx://yy)的schema(即xx)是否实际是要调用swift,如果是,则按约定执行之,并返回false阻止网页路径变化,如果不是要调用swift,则返回true,让改网页继续正常加载目标url。 android和iOS对比,它们都用了伪url的技术,但android是在本地语言调js时使用了伪url(该url的schema为javascript),而iOS是js调本地语言时使用了伪url(该url是自定义的标识),这个错落很有意思。 swift代码: import UIKit class ViewController: UIViewController, UIWebViewDelegate { @IBOutlet weak var theWebView: UIWebView! override func viewDidLoad()

JQ的基础

南笙酒味 提交于 2020-03-07 14:36:45
JQ的触发 在js中,如果要在代码执行的时候运行方法,则需要在里面设置一个οnlοad=check()触发事件,一旦该代码执行的时候则会运行js中的check()方法; 但是在jq中不需要设置该触发事件,直接是$(function(){});即可 下面是jq的代码 < ! DOCTYPE html > < html > < head > < meta charset = "UTF-8" > < title > < / title > < script src = "../js/jquery-1.11.3.min.js" > < / script > < script > $ ( function ( ) { alert ( "aaaa" ) ; } ) ; $ ( function ( ) { alert ( "bbb" ) ; } ) ; < / script > < / head > < body > < / body > < / html > 下面是js的代码 < ! DOCTYPE html > < html > < head > < meta charset = "UTF-8" > < title > < / title > < script > function check ( ) { alert ( "aaa" ) ; } < / script > < / head