js

JS闭包那些事

会有一股神秘感。 提交于 2020-02-12 00:05:28
关于闭包,我曾经一直觉得它很讨厌,因为它一直让我很难搞,不过有句话怎么说来着,叫做你越想要一个东西,就要装作看不起它的样子。所以,抱着这个态度,我终于掳获了闭包。 首先来认识一下什么是闭包,闭包,一共有三大特征: 1 函数嵌套函数 2 内部的函数可以引用外部函数的参数和变量 3 参数和变量不会被垃圾回收机制所收回 举个栗子: function aaa(){ var b = 5; function bbb(){ b++; alert(b); } } aaa(); 这个栗子就是很明显的闭包,函数里面嵌套函数,同时内部的函数bbb又可以访问到外部函数aaa中的变量,至于第三个特征,我们都知道在JS解析机制中,函数内的变量在函数调用完后会被销毁,但在这里b并没有被销毁,因为他还会被里面的函数bbb引用,那么怎么证明呢? 首先,我们要注意,在上面这个栗子中,是不会弹出值的,因为里面的函数bbb,只是声明了,并没有被调用,我们都知道,函数它不会主动执行的,那么怎么执行呢,看下面: function aaa(){ var b = 5; function bbb(){ b++; alert(b); // 6 } return bbb; } var c = aaa(); // 此时aaa被执行 同时把返回结果bbb 赋给c c(); //6 将里面的函数作为返回结果,然后可以调用,这种经常会遇见

js 对象和函数补充

隐身守侯 提交于 2020-02-11 23:42:12
JS对象补充(掌握) // 1) js没有字典类型,只有对象类型,对象可以完全替代字典来使用 var dic_obj = { //属性:值(数值,函数) 'name':'Bob', 'eat':function () { console.log('在吃饭') } }; console.log(dic_obj.name,dic_obj['name']); dic_obj.eat(); dic_obj['eat'](); // 2) js中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识 var obj = { name: 'Tom', eat: function () { console.log('在吃饭...') } }; console.log(obj.name,obj['name']); obj.eat();obj['eat'](); // 3) 对象中属性值为函数时,称之为方法,方法建议简写 方法名(){} var obj2 = { name: 'Tom', eat () { console.log('在吃饭...') } }; console.log(obj2.name,obj2['name']); obj2.eat();obj2['eat'](); //4) 如果对象的属性值是一个变量,且变量名与属性名相同,还可以简写 {属性,} var height =

js分支、循环语句

微笑、不失礼 提交于 2020-02-11 22:50:41
折纸:折多少次和珠穆朗玛峰一样高 1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 2.有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问几年后有多少对兔子,幼兔、小兔、成兔对数分别是多少。 幼兔 1 小兔 0 成兔 0 幼兔 0 小兔 1 成兔 0 幼兔 1 小兔 0 成兔 1 幼兔 1 小兔 1 成兔 1 幼兔 2 小兔 1 成兔 2 幼兔 3 小兔 2 成兔 3 幼兔 5 小兔 3 成兔 5 当前月份幼兔 = 上个月的成兔+上月小兔 当前月份小兔 = 上月幼兔 当前月份成兔 = 上月成兔+上月小兔 3.羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能 羽毛球拍最多买13个 球最多买66个 水最多买100个 4.公鸡2文,母鸡1文,小鸡半文,每种至少一只,100文买100只鸡有多少可能性 公鸡最多50,母鸡最多100,小鸡最多200 5.凑钱1,2,5凑20元钱有多少可能 1元 20 2元 10 5元 4 内容 1: <script> a=0.0001 for(i=1;true;i++){ a*=2 if(a>=8848){ alert(i) break; } } </script> 2: <script> n=prompt("你想问几月之后呢?") n=parseInt(n) a=1 b=0 c=0 for

vue 框架

自闭症网瘾萝莉.ら 提交于 2020-02-11 22:13:11
目录 Vue 框架 主要内容: Vue框架:前台界面,页面逻辑 DRF框架:数据(接口) Luffy项目:前后台分离项目 Vue框架 (1) 定义:javascript 渐近式框架 (2)优势: (3)为什么学习vue: (4)如何使用Vue Vue环境简单搭建:通过script标签导入vue文件即可 el:挂载点 插值表达式 过滤器 以上所学实例成员(实例属性,自我完成小结) 文本指令 事件指令 js函数补充 js函数补充 课堂精细总结: 1、路飞项目所有知识点概况(了解) 2、Vue框架的介绍 3、基础实例成员 4、基础指令 5、js对象补充: Vue 框架 主要内容: Vue框架:前台界面,页面逻辑 (1)指令 (2)实例成员 (3)组件 (4)项目开发 DRF框架:数据(接口) (1)基础的模块:请求、响应、解析、渲染、 (2)序列化、三大特征 (3)过滤、收索、排序、分页 (4)异常、第三方jwt、restful接口规范 Luffy项目:前后台分离项目 (1)项目的登陆认证、课堂商机销售、项目完成 (2)短信、支付宝、服务器、上线、redis、celery、git Vue框架 (1) 定义:javascript 渐近式框架 渐进式:可以控制一个页面的一个标签,也可以控制一系列标签,也可以控制整个页面,甚至可以控制整个前台项目。 (2)优势: 有指令(分支结构,循环结构,.

Js综合面试题

纵然是瞬间 提交于 2020-02-11 21:42:24
考点: 1、变量提升和函数提升 2、this指向 3、变量查找规则及作用域 4、运算符优先级 5、实例对象查找属性(隐式原型链) 例题: 原: function Foo ( ) { getName = function ( ) { alert ( 1 ) ; return this ; } } Foo . getName = function ( ) { alert ( 2 ) } ; Foo . prototype . getName = function ( ) { alert ( 3 ) } ; var getName = function ( ) { alert ( 4 ) } ; function getName ( ) { alert ( 5 ) } 1、遇到function关键字会将代码整体提升 (函数提升) 2、遇到var关键字声明的变量,会将变量提升,变量值不动 (变量提升) 3、若两者冲突,则只会保留函数的定义 提升后: function Foo ( ) { getName = function ( ) { //由于此函数作用域中未声明变量getName,所以去全局作用域中找,所以将下面的getName重赋值 alert ( 1 ) ; return this ; } } //var getName; 和function getName()冲突,省略 /*

简单详细讲解js闭包(转载)

不问归期 提交于 2020-02-11 21:03:16
闭包,其实是一种语言特性,它是指的是程序设计语言中,允许将函数看作对象,然后能像在对象中的操作般在函数中定义实例(局部)变量,而这些变量能在函数中保存到函数的实例对象销毁为止,其它代码块能通过某种方式获取这些实例(局部)变量的值并进行应用扩展。 我们的理解: 其实闭包就是一个函数,一个外部函数通过调用函数并return返回出内部函数,这里的内部函数就是一个闭包;此时在内部函数中是可以访问到外部函数的变量的; 要想理解闭包,首先我们要了解栈堆内存和作用域链;首先我们来讲解栈堆内存: 首先我们来看个demo: var a=1; var obj={"name":"咸鱼"} 上面简单的两句代码,其实就是在内存中做了两件事,效果图如下: 在js简单实现深浅拷贝(https://www.cnblogs.com/dengyao-blogs/p/11466598.html)一文中我们知道基本数据类型是存储在栈内存中的,引用数据类型是存储在堆内存中的,其实上面的两句代码在内存中就是做了两件事: 1.首先在栈内存中开辟了一块空间用来存放a的变量和值; 2.在堆内存中开辟了一块空间用来存储obj的值,同时在将地址指向栈内存中的变量名obj 如果我们在代码下面再加上一句obj={"name":'张三"},这个时候我们之前存储name为咸鱼的值也就是obj原来的值会被js中的垃圾回收机制回收掉

ASP.NET MVC之Bundle压缩JS和CSS

久未见 提交于 2020-02-11 20:00:35
介绍Bundle之前先引用《淘宝技术这十年》中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS、JS(JavaScript)、图片等样式、脚本和资源文件。但是可能相对较少的人才会知道,你的浏览器在同一个域名下并发加载的资源数量是有限的,例如IE 6和IE 7是两个,IE 8是6个,chrome各版本不大一样,一般是4~6个。Bundle是ASP.NET 4.5中的一个新特性,可 用来将js和css进行压缩(多个文件可以打包成一个文件,也可以说是合并多个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题。如果你新建一个有模板的MVC4项目,就可以直接使用了。 官方写法 新建完一个MVC4项目之后可以在APP_Start中的BundleConfig.cs看到这样的代码: public class BundleConfig { // 有关 Bundling 的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=254725 public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~

yii 载入css or js

元气小坏坏 提交于 2020-02-11 19:51:52
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . "/js/TableView.js"); Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . "/js/datechooser.js"); Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl . "/css/datechooser.css"); 参考资料 Yii::app()->clientScript->registerScript('user_is_guest', '$(document).ready(function(){$(".login-box-bg").show();$("#login-user-box").show();})', CClientScript::POS_READY); Yii::app()->clientScript->registerScript('user_is_guest', "alert('".Yii::app()->user->getFlash('user_is_guest')."');", CClientScript::POS_READY); 参考资料 来源:

js中事件冒泡的理解与分析

放肆的年华 提交于 2020-02-11 19:32:07
一. 事件 事件的三个阶段:事件捕获 -> 事件目标 -> 事件冒泡 捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象; 目标阶段:到达目标事件位置(事发地),触发事件; 冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象 事件捕获 :事件发生时首先发生在document上,然后依次传递给body,最后到达目的节点(即事件目标), 事件流模型:div →body→ html→ document 。 事件冒泡 :事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反。 onclick 事件冒泡,重写onlick会覆盖之前属性,没有兼容性问题 addEventListener(event.type, handle, boolean); IE8及以下不支持,属于DOM2级的方法,可添加多个方法不被覆盖。事件类型没有on,第三个参数false,表示在事件第三阶段(冒泡)触发,true表示在事件第一阶段(捕获)触发。如果绑定同一个事件同一个方法,只会执行一次,所以如果handle是同一个方法,只执行一次。 attachEvent(event.type, handle ); IE特有,兼容IE8及以下,可添加多个事件处理程序,只支持冒泡阶段,可以多次进行绑定,所以如果handle是同一个方法,绑定几次执行几次

js获得Date总的毫秒数(时间戳)

空扰寡人 提交于 2020-02-11 17:46:45
// 获得Date总的毫秒数(时间戳) 不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒数 // 1. 通过 valueOf() getTime() var date = new Date ( ) ; console . log ( date . valueOf ( ) ) ; // 就是 我们现在时间 距离1970.1.1 总的毫秒数 console . log ( date . getTime ( ) ) ; // 2. 简单的写法 (最常用的写法) var date1 = + new Date ( ) ; // +new Date() 返回的就是总的毫秒数 console . log ( date1 ) ; // 3. H5 新增的 获得总的毫秒数 console . log ( Date . now ( ) ) ; 来自PINK老师课堂笔记 来源: CSDN 作者: 木修于林 链接: https://blog.csdn.net/qq_42837306/article/details/104264943