解析函数

0143 JavaScript预解析:概念、变量预解析、函数预解析、函数表达式声明函数问题、案例

心不动则不痛 提交于 2020-01-07 03:20:08
4.1 预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。 JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析 和 代码执行。 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。 【提升到当前作用域的最顶部。】 代码执行: 从上到下执行JS语句。 预解析会把变量和函数的声明在代码执行之前执行完成。 【 声明提前,赋值留在原地 。】 4.2 变量预解析 预解析也叫做变量、函数提升。 变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。 console.log(num); // 结果是多少? var num = 10; // ? 结果:undefined 注意:**变量提升只提升声明,不提升赋值** 4.3 函数预解析 函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。 注意:`函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!` fn(); function fn() { console.log('打印'); } 结果:控制台打印字符串 --- ”打印“ 4.4 函数表达式声明函数问题 函数表达式创建函数,会执行变量提升

Django创建表关系,Django生命周期图之路由层和视图层简介

风格不统一 提交于 2020-01-07 02:59:58
一.Django框架中rom的表关系创建 1).表与表的关系 一对一 一对多 多对多 具体sql语句及关系请查看 数据库基础链接 2)以图书管理系统为例,创建几张关系表 注意:**在models.py中书写表关系的时候,要先写好基表,再写外键关系 # 先建立好三张基表from django.db import models​# Create your models here.#书表class Book(models.Model): # id 是自动创建的,除非id名自定义 title = models.CharField(max_length=255) # price为小数字段,表示总共8位数,其中小数占2位 price = models.DecimalField(max_digits=8, decimal_places=2)​​#出版社表class Publsh(models.Model): name = models.CharField(max_length=64) addr = models.CharField(max_length=64)​​# 作者表class Author(models.Model): name = models.CharField(max_length=64) # 比Int类型长一些 phone = models.BigIntegerField()​

django基础

拈花ヽ惹草 提交于 2020-01-06 20:53:26
目录 django基础 django orm表关系创建 多表创建的三种形式 以图书管理管理系统为例可分为几种表 方便我们后面的基于orm查询 django 请求生命周期流程图 路由层 路由匹配 无名分组 分组就是给一段正则表达式加括号 有名分组 反向解析 无名分组反向解析 有名分组反向解析 路由分发 1.总路由 2.子路由 名称空间(了解) 虚拟环境 如何创建虚拟环境 django版本区别 路由层 正则表达式的回顾 伪静态 视图层 JsonResponse form 表单上传文件 后端如何获取 django基础 django orm表关系创建 多表创建的三种形式 一对多 多对多 一对一 以图书管理管理系统为例可分为几种表 图书表 图书和出版社是一对多的外键关系,一对多外键关系,外键字段建在多的一方。 出版社 出版社和图书表是一对多的外键关系 作者表 图书与作者是多对多外键关系 多对多外键关系 外键字段无论建在哪张表里面都可以 但是推荐你建在查询频率较高的那种表中 作者与作者详情是一对一的外键关系 一对一外键关系 外键字段建在哪张表里面都可以 但是推荐你建在查询频率较高的那种表中 方便我们后面的基于orm查询 注意: ForeignKey字段以及OneToOneField字段 在创建表的时候orm都会自动给该字段加_id的后缀,无论自己有没有加,都默认给你加上。 在书写表关系时

django源码解析(二)

故事扮演 提交于 2020-01-04 20:40:05
书接上回 execute_from_command_line函数执行过程中, 遇到的第一个django的类 CommandParser class CommandParser ( ArgumentParser ) : 在使用django的扩展: 自定义命令时, 也用到了这个类. ArgumentParser使用的是python的标准库argparse. 故此, 在使用django的自定义命令时, 关于参数解析(add_argument) 应该去参考argparse的文档说明. settings . INSTALLED_APPS 这行代码很有意思, 首先settings是LazySettings类的一个实例化对象. 紧接着通过访问属性 INSTALLED_APPS , 触发__getattr__函数, 在__getattr__函数中, 由于第一次访问settings变量, 此时会调用_setup函数, 将上一节提到的DJANGO_SETTINGS_MODULE环境变量对应的配置文件导入, 先放入_wrapped中缓存下来, 紧接着拿到_wrapped中INSTALLED_APPS属性值, 并将其写入到settings对象的属性当中. 以下为参考资料: Django – settings 详解 __getattr__函数作用详解 首先要了解__getattr__函数的作用:

深入解析AMS启动

亡梦爱人 提交于 2020-01-04 05:19:45
AMS由system_server的ServerThread线程创建,在创建时有四个非常重要的过程: 1.调用AMS的main函数,得到一个context对象 1 context = ActivityManagerService.main(factoryTest); 2.调用setSystemProcess函数,这样可以把system_server进程加到AMS中作统一管理 1 ActivityManagerService.setSystemProcess(); 3.调用installSystemProviders函数,把SettingProvider放到system_server进程中来运行 1 ActivityManagerService.installSystemProviders() 4.AMS准备好之后,启动systemReady线程来整个系统的启动 1 ActivityManagerService.self().systemReady(new Runable() { 2 public void run() { 3 startSystemUi(contextF);//启动systemUI,准备状态栏 4 ... 5 Watchdog.getInstance().start();//启动Watchdog 6 ...//调用其他服务的systemReady函数 7 }

vue双向绑定原理及实现

自闭症网瘾萝莉.ら 提交于 2020-01-04 00:45:19
vue双向绑定原理及实现 一、总结 一句话总结:vue中的双向绑定主要是通过发布者-订阅者模式来实现的 发布 订阅 1、单向绑定和双向绑定的区别是什么? model view 更新 单向绑定:model--->view(model更新view) 以往的MVC模式是单向绑定,即 Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新 双向绑定:model<--->view(model可以更新view,view也可以更新model) MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。 我对于双向绑定的理解,就是 用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。再说细点,就是在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,(change事件触发,View的状态就被更新了)来动态修改model。 2、双向绑定原理是什么? 发布 订阅 监听器 订阅者 解析器 vue数据双向绑定是通过 数据劫持 结合 发布者-订阅者模式 的方式来实现的。 我们已经知道实现数据的双向绑定,首先要对 数据进行劫持监听,所以我们需要设置一个 监听器Observer,用来 监听所有属性。如果属性发上变化了,

vue的双向绑定原理及实现

删除回忆录丶 提交于 2020-01-04 00:23:56
转自https://www.cnblogs.com/canfoo/p/6891868.html 前言 使用vue也好有一段时间了,虽然对其双向绑定原理也有了解个大概,但也没好好探究下其原理实现,所以这次特意花了几晚时间查阅资料和阅读相关源码,自己也实现一个简单版vue的双向绑定版本,先上个成果图来吸引各位: 代码: 效果图: 是不是看起来跟vue的使用方式差不多?接下来就来从原理到实现,从简到难一步一步来实现这个SelfVue。由于本文只是为了学习和分享,所以只是简单实现下原理,并没有考虑太多情况和设计,如果大家有什么建议,欢迎提出来。 本文主要介绍两大内容: 1. vue数据双向绑定的原理。 2. 实现简单版vue的过程,主要实现{{}}、v-model和事件指令的功能。 相关代码地址: https://github.com/canfoo/self-vue vue数据双向绑定原理 vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象是个什么东西。 代码: var vm = new Vue({ data: { obj: { a: 1 } }, created: function () { console.log(this.obj); } }); 结果:

深入vue源码,了解vue的双向数据绑定原理

断了今生、忘了曾经 提交于 2020-01-04 00:23:39
大家都知道vue是一种MVVM开发模式,数据驱动视图的前端框架,并且内部已经实现了双向数据绑定,那么双向数据绑定是怎么实现的呢? 先手动撸一个最最最简单的双向数据绑定 1 <div> 2 <input type="text" name="" id="text"> 3 <span id="show"></span> 4 </div> 5 6 <script> 7 var text = document.getElementById('text') 8 var span = document.getElementById('show') 9 var obj = {} 10 Object.defineProperty(obj, 'hello', { 11 set: function(value){ 12 text.value = value 13 span.innerText = value 14 } 15 }) 16 document.addEventListener('keyup',function(e){ 17 obj.hello = e.target.value 18 }) 19 </script> 这样就能实现一个简单的双向数据绑定了,这里再解释一下defineProperty这个方法吧。 语法: Object.defineProperty(obj,prop

【Vue】vue的双向绑定原理及实现

我们两清 提交于 2020-01-04 00:23:14
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象是个什么东西。 代码: var vm = new Vue({ data: { obj: { a: 1 } }, created: function () { console.log(this.obj); } }); 结果: 我们可以看到属性a有两个相对应的get和set方法,为什么会多出这两个方法呢?因为vue是通过Object.defineProperty()来实现数据劫持的。 Object.defineProperty( )是用来做什么的?它可以来控制一个对象属性的一些特有操作,比如读写权、是否可以枚举,这里我们主要先来研究下它对应的两个描述属性get和set,如果还不熟悉其用法, 请点击这里阅读更多用法 。 在平常,我们很容易就可以打印出一个对象的属性数据: var Book = { name: 'vue权威指南' }; console.log(Book.name); // vue权威指南 如果想要在执行console.log(book.name)的同时,直接给书名加个书名号,那要怎么处理呢?或者说要通过什么监听对象 Book 的属性值。这时候Object.defineProperty( )就派上用场了

Web前端知识体系精简

北战南征 提交于 2020-01-04 00:07:49
Web前端技术由 html、css和 javascript 三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。本文将对Web前端知识体系进行简单的梳理,对应的每个知识点点到为止,不作详细介绍。目的是帮助大家审查自己的知识结构是否完善,如有遗漏或不正确的地方,希望共勉。 一、JAVASCRIPT 篇 0、基础语法 Javascript 基础语法包括:变量声明、数据类型、函数、控制语句、内置对象等。 在ES5 中,变量声明有两种方式,分别是 var 和 function ,var 用于声明普通的变量,接收任意类型,function用于声明函数。另外,ES6 新增了 let、const、import 和 class 等四个命令,分别用以声明 普通变量、静态变量、模块 和 类 。 JS数据类型共有六种,分别是 String、Number、Boolean、Null、Undefined 和 Object 等, 另外,ES6新增了 Symbol 类型。其中,Object 是引用类型,其他的都是原始类型(Primitive Type)。 原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈