js代码

js作用域和词法分析

狂风中的少年 提交于 2020-03-08 02:22:20
  都知道js中不存在类似于c++等语言的块级作用域,例如for循环中定义的变量,其实是属于当前对象下的属性,同一对象下可以随便访问。 只有函数可以限定一个变量的作用范围,即函数才是变量的作用域。   对于函数的变量访问时遵循作用域链的,即当前函数运行时会有一个当前作用域,当饮用某个变量时,会先查找当前作用域内是否存在该变量的定义,如果不存在则根据作用域链向上去查找父函数的作用域,有则拿来使用,没有则继续向上直到全局作用域。关于作用域链这里就不仔细描述,简单而言,类似原型链,从全局函数直到当前函数的作用域存在一种相互包含的关系,子可以向上访问,但是父不可以向下访问子函数的变量,这样层层嵌套的关系链。   类似这样的:  var num = 10;   function a (){     alert(num);   }   a() //结果alert(10),a里没有num所以向上查找外层的作用域,有且等于10所以弹出10而不是undefined.   但是,下面的代码就是undefined了:   var num = 10; var num = 10;   function a (){     alert(num);     var num = 11;   }    为什么呢? a()执行时虽然num=11没有赋值但是父级作用域里是有num=10的,不应该是 undefined呀

js闭包

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

浏览器执行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

js基础的介绍及变量

馋奶兔 提交于 2020-03-07 07:06:17
js介绍 Js全称叫javascript,但不是java,他是一门前台语言,而java是后台语言。 Js作者是布兰登艾奇。 前台语言:运行在客户端的 后台语言:跟数据库有关的。 能干什么? 页面特效,开发页面游戏,后台开发等等。 js和ECMAscript的关系 ES不是语言,是js的标准,我们学习js得按es的标准学习。 前端的三个层次 Html 结构层 Css 表现层 Js 行为层 Js写在哪里 因为js和php都是脚本语言,js写在script这个标签里,php写在<?php>标签里。 B 变量 变量:可以改变的量,往往用英文字母代替变量,并且区分大小写。 变量的定义(声明): var 加 字母 var a 我声明了一个变量叫a 变量的用途:变量其实是一个容器,起到临时存储数据的作用。 通过=进行赋值。 var a=12; js语言的输出 alert() 这是js中的一个方法 弹出框 console.log() 浏览器控制台输出,用于代码测试 document.write() 在浏览器中写出 js的注释 (1) 单行注释 // (2) 多行注释 /* 内容 */ 常量 不变的量 汉字 数字 往往当做值使用。除了数字之外 要带引号”” ‘’ 红色的报错,说雅宁是一个变量,但是这个变量没有声明。 说明有这个变量,但是没有赋值。 变量起名的规则:不能使用汉字 区分大小写

JS知识

微笑、不失礼 提交于 2020-03-07 07:05:47
一、js介绍   js全称JavaScript,但不是Java,它是一门前台语言,不是后台语言。创始人 布兰登艾奇。   前台语言:运行在客户端的;后天语言:跟数据库有关的 二、js能干什么?   页面特效,开发页面游戏,后台开发等等。 三、JS和ECMAScript的关系   ES不是语言,是JS的标准,我们学习JS 得按ES的标准来。 四、前端的三个层次   html :结构层   css:表现层  JS:行为层 五、JS写在什么地方   因为js和php都是脚本语言,js写在script这个标签里,php写在<?php>里 六、变量: 可以改变的量,往往用英文字母代替变量,并且区分大小写   变量的定义(声明):var加字母, var a 声明了一个变量叫a   变量的用途:变量是一个容器,起到临时存储数据的作用   通过=进行赋值   变量起名的规则:不能使用汉字,区分大小写,不能特殊符号开头 除了_ $ 七、JS语言的输出   alert()弹出框   console.log()浏览器控制台输出,用于代码测试   document.write()在浏览器中写出 八、注释   单行注释 //   多行注释/* */ 九、常量 不变的量   汉字、数字往往当做值使用,除了数字外要带""   带引号和不带引号:       带引号的 是什么就输出什么 ——叫字符串      

js第一天

白昼怎懂夜的黑 提交于 2020-03-07 07:05:26
1.JS介绍 全称叫JavaScript,但不是Java,js是一门前台语言,而Java是后台语言。 js的作者是 布兰登 . 艾奇 前台语言:运行在客户端的 后台语言:跟数据库有关 2.JS可以干什么? 页面特效,开发页面游戏,后台开发等等。 3.JS和ECMAScript之间的关系 ES不是语言,是js的标准,我们学习js得按ES的标准学习 4.前端的三个层次 html 结构层 css 表现层 js 行为层 5.js写在哪里 因为js和php都是脚本语言, js写在script这个标签里 ,php写在<?php>标签里 A. B. 6.变量 变量:可以改变的量,往往用英文字母代替变量,并且区分大小写。 变量的定义(声明):var加字母 例如: var a 我声明了一个变量叫a 变量的用途:变量其实是一个容器,起到 临时存储数据 的作用。 通过=进行赋值 如var a=12; 7.js语言的输出    alert() 这是js中的一个弹出框       console.log() 浏览器控制台输出,用于代码测试       document.write() 在浏览器中写出    8.js的注释   (1)单行注释//   (2)多行注释/*内容*/ 9.常量 不变的量 汉字 数字往往当做值使用。除了数字之外 要带引号" " 红色的报错, 说明雅宁是个变量,但是这个变量没有声明

JS第一天 2018.10.15

不打扰是莪最后的温柔 提交于 2020-03-07 07:05:03
                               JS入门 1.js介绍:Java script 它是一门前台语言,而Java是后台语言。 JScript作者:布兰登艾奇 前台语言:运行在客户端; 后台语言:与数据库有关。 JScript能做什么?   页面特效;开发页面游戏;后台开发等。 2.js和ECMAscript的关系 ES不是语言,是js的标准,我们学习js得按es的标准学习 3.前端的三个层次 Html 结构层 Css 表现层 Js 行为层 4.Js写在哪里 因为js和php都是脚本语言,js写在script这个标签里,php写在<?php>标签里。 5.变量 变量:可以改变的量,往往用英文字母代替变量,并且区分大小写。 变量的定义(声明): var 加 字母 var a 我声明了一个变量叫a 变量的用途:变量其实是一个容器,起到临时存储数据的作用。 通过" = "进行赋值。 var a=12; 6.js语言的输出 alert() 这是js中的一个方法: 弹出框 console.log() 浏览器控制台输出,用于代码测试 document.write() 在浏览器中写出 js的注释 (1) 单行注释 // (2) 多行注释 /* 内容 */ 7.常量 不变的量 汉字 数字 往往当做值使用。除了数字之外 要带引号”” ‘' 出现“undefined”

js笔记1

做~自己de王妃 提交于 2020-03-07 07:04:44
1.js介绍    js全称叫JavaScript,但不是Java,他是一门前台语言,而Java是后台语言   js作者是布兰登艾奇   前台语言:运行在客户端   后台语言:跟数据库有关的 2.js能干什么?    页面特效,开发页面游戏,后台开发等等 3.js和EcmaScript的关系    ES不是语言,是js的标准,我们学习js得按es的标准学习 4.前端的三个层次    HTML结构层   Css表示层   Js行为层 5.js写在那里    因为js和php都是脚本语言,js写在script这个标签里,php写在<?php>标签里    A       B    6.变量    变量:可以改变的量,往往用英文字母代替,并且区分大小写   变量的定义(声明):var加字母 var a,我声明了一个变量叫a   变量的用途:变量其实是一个容器,起到临时存储数据的作用   通过=进行赋值  var=12; 7.js语言的输出    alert()这是js中的一个方法,弹出框    console.log()浏览器控制台输出,用于代码测试       document.write()在浏览器中写 8.js的注释   (1)单行注释 //  (2)多行注释 /* 内容 */ 9.常量(不变的量)    (1)汉字 数字 往往当做值使用。除了数字之外 要带引号“ ”   (2)