变量

js作用域以及变量提升

怎甘沉沦 提交于 2020-02-26 16:27:19
一、作用域 定义 作用域,即产生作用的特定区域。 javaScript的作用域,即js的变量或者函数产生作用的对应区域。也就是说区域内的可以访问区域外的变量和函数,但是区域外的则不能访问区域内的变量和函数。 分类 在ES5中,作用域分为两种:全局变量和局部变量。 (1)全局变量:所有地方均可访问(在函数外部声明的变量); (2)局部变量:只能在函数内部访问(在函数内部用var关键字声明的变量以及函数的形参)。 在ES6中,新增了块级作用域。 (3)块级作用域:只能在距离最近的大括号的作用范围内访问(仅限于let声明的变量)。 应用 // 全局变量 var i = 0 ; // 定义外部函数 function outer(){ // 访问全局变量 console.log(i); // (1) function inner1(){ console.log(i); // (2) } // inner2中定义局部变量 function inner2(){ console.log(i); // (3) var i = 1; console.log(i); // (4) } inner1(); inner2(); console.log(i); // (5) } outer();//输出结果依次为:0 0 undefined 1 0 注释(1)处:outer()内未声明和定义局部变量i,

【零基础C语言】- 必学知识点 "结构体"

杀马特。学长 韩版系。学妹 提交于 2020-02-26 15:50:39
结构体是经常用到的数据类型,使用频率不亚于指针,所以需要重视,不过用法非常简单。 一、什么是结构体 ☀ 在前面的时候已经介绍了C语言中的数组,用法跟其他语言差不多。当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。 ☀ 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。 ☀ 为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的。 二、结构体的定义 1.定义形式 结构体内部的元素,也就是组成成分,我们一般称为"成员"。 结构体的一般定义形式为: struct是关键字,是结构体类型的标志。 2.举例 比如,我们定义一个学生 上面定义了一个叫做Student的结构体,共有name、age、height3个成员。呵呵,看到这里是否有点面向对象的味道呢,其实这跟面向对象完全是两码事,只能说感觉有点像。 三、结构体变量的定义 前面只是定义了名字为Student的结构体类型,并非定义了一个结构体变量,就像int一样,只是一种类型。 接下来定义一个结构体变量,方式有好多种。 1.先定义结构体类型,再定义变量 第6行定义了一个结构体变量,变量名为stu

引用与指针的区别

萝らか妹 提交于 2020-02-26 13:42:03
目录 1 引用的概念 2 指针的概念 3 定义引用 4 引用和指针的区别 1 引用的概念 引用就是变量的别名,对引用的操作等价于对变量的操作,不会给引用分内存空间,引用和被引用的变量共享一块内存空间。 一个变量可以有多个引用,一个引用只能对应一个变量(一个引用不能是多个变量的别名)。 2 指针的概念 指针是“指向”另外一种类型的符合类型。指针可以实现对对象的间接访问。 3 定义引用 数据类型 &引用名 = 变量名; 注意: 1)在定义引用的时候一定要初始化 2)一个引用只能是一个变量的别名,不能是多个变量的别名 &什么时候是取地址,什么时候是引用? &前有数据类型就是引用, &前没有数据类型就是取地址 4 引用和指针的区别 区别如下: 1)指针占4个字节内存空间,引用不占内存,引用的和被引用的变量共用同一块内存空间 2)指针可以改向,引用一旦初始化完成,不能变成别的变量的引用 3)指针可以不初始化,引用一定要初始化 4)指针的运算只是移动一个数据类型的地址,引用的运算就是变量的运算 5)可以有void*型指针,不能有void型的引用 6)有数组指针,函数指针,不能有数组引用,和函数引用 7)常引用可以是常量的别名,指针只能是字符串常量的地址,不能定义成其他常量的地址。 8)可以定义多级指针,但不能这样定义: 数据类型 && 引用名 = 变量名; 引用也可以有别名

shell脚本学习-02 shell命令

北城以北 提交于 2020-02-26 13:38:00
shell命令 1、read命令:从键盘读入数据,赋给变量 如:read USERNAME echo ${M_VAR} 2、expr命令:对整数型变量进行算术运算 例如:expr 3 + 5 expr $var1 - 5 expr $var1 / $var2 expr $var3 \* 10 复杂的运算:expr expr 5 + 7 /$var4 将运算结果赋予变量:var4= expr $var1 / $var2 var4=$(expr expr $var1 + $var2 /$var3) 3、变量测试语句:用于测试变量是否相等、 是否为空、文件类型等。 格式:test 测试条件 测试范围:整数、字符串、文件 字符串测试: test str1=str2 测试字符串是否相等 test str1!=str2 测试字符串是否不相等 test str1 测试字符串是否不为空 test -n str1 测试字符串是否不为空 test -z str1 测试字符串是否为空 整数测试: test int1 -eq int2 测试整数是否相等 test int1 -ge int2 测试int1是否>=int2 test int1 -gt int2 测试int1是否>int2 test int1 -le int2 测试int1是否<=int2 test int1 -lt int2 测试int1是否

深入理解CAS算法原理

时光怂恿深爱的人放手 提交于 2020-02-26 10:14:59
1、什么是CAS? CAS:Compare and Swap,即比较再交换。 jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。 2、CAS算法理解 对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS比较与交换的伪代码可以表示为: do{ 备份旧数据; 基于旧数据构造新数据; }while(!CAS( 内存地址,备份的旧数据,新数据 )) https://upload-images.jianshu.io/upload_images/5954965-b88918b03518f254?imageMogr2/auto-orient/strip|imageView2/2/w/320/format/webp 注:t1,t2线程是同时更新同一变量56的值 因为t1和t2线程都同时去访问同一变量56,所以他们会把主内存的值完全拷贝一份到自己的工作内存空间,所以t1和t2线程的预期值都为56。 假设t1在与t2线程竞争中线程t1能去更新变量的值,而其他线程都失败。

js中级系列三:前端性能优化

随声附和 提交于 2020-02-26 09:15:56
原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answer/18903129 前端优化的途径有很多,按粒度大致可以分为两类, 第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ; 第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。 一、页面级优化   1. 减少 HTTP请求数   一个完整的请求都需要经过 DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个 “漫长” 而复杂的过程。时间成本就是用户需要看到或者 “感受” 到这个资源是必须要等待这个过程结束的,资源上由于每个请求都需要携带数据,因此每个请求都需要占用带宽。另外,由于浏览器进行并发请求的请求数是有上限的 (具体参见此处 ),因此请求数多了以后,浏览器需要分批进行请求,因此会增加用户的等待时间,会给用户造成站点速度慢这样一个印象,即使可能用户能看到的第一屏的资源都已经请求完了,但是浏览器的进度条会一直存在。   减少 HTTP请求数的主要途径包括:   (1). 从设计实现层面简化页面     如果你的页面像百度首页一样简单

Python基础之变量基本用法与进阶详解

空扰寡人 提交于 2020-02-26 08:30:24
本文实例讲述了Python基础之变量基本用法与进阶。分享给大家供大家参考,具体如下: 目标 变量的引用 可变和不可变类型 局部变量和全局变量 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用 变量 改为 对新赋值的数据引用 1.2 变量引用 的示例 在 Python 中,变量的名字类似于 便签纸 贴在 数据 上 定义一个整数变量 a,并且赋值为 1 将变量 a 赋值为 2 定义一个整数变量 b,并且将变量 a 的值赋值给 b 变量 b 是第 2 个贴在数字 2 上的标签 1.3 函数的参数和返回值的传递 在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的 def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result = 100 print("返回值

JS闭包

六月ゝ 毕业季﹏ 提交于 2020-02-26 08:00:37
JS闭包 了解什么是闭包 先来一段代码,根据代码分析能更容易理解: function a ( ) { var num = '我是函数a的变量num' ; return function b ( ) { console . log ( num ) ; } } var res = a ( ) ; res ( ) ; 从函数a上看 :有一个函数a,在函数a的内部,返回了一个函数b,而函数是一个复杂数据类型,即在一个函数内部,返回了一个复杂数据类型。 从函数b上看 :函数b中,访问着函数a的里面的变量(数据),也就是在一个被返回的函数里,有一个外部作用域的变量。 从函数a外部看 :有一个变量res,引用了函数a,但是由于函数a内部存在有一个返回值函数b,则,这个变量,相当于在引用了函数b(调用函数a,执行结果就是函数b)。 代码上的分析: function a ( ) { //这个 num 变量就是函数 a 的变量 var num = '我是函数a的变量num' ; return function b ( ) { //这里在后台输出的num,是函数a的变量 console . log ( num ) ; } } //res 所接收到的是 a 函数执行以后的返回值 //而这个返回值就是函数 a 内部返回的一个复杂数据类型(函数b) //这个时候,触发了一个不会销毁的函数空间 /

web前端性能优化总结

放肆的年华 提交于 2020-02-26 07:52:42
原文地址http://www.2cto.com/kf/201604/498725.html 网站的划分一般为二:前端和后台。我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等。而前端呢?其实应该是属于功能的表现。并且影响用户访问体验的绝大部分来自前端页面。 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的。除了后台需要在性能上做优化外,其实前端的页面更需要在性能优化上下功夫,只有这样才能给我们的用户带来更好的用户体验。就好像,好多人问,男人在找女朋友的时候是不是只看外表,一些智慧的男人给出了这样的回答:脸蛋和身材决定了我是否想去了解她的思想,思想决定了我是否会一票否决她的脸蛋和身材。同理,网站也是这样,网站前端的用户体验决定了用户是否想要去使用网站的功能,而网站的功能决定了用户是否会一票否决前端体验。 不仅仅如此,如果前端优化得好,他不仅可以为企业节约成本,他还能给用户带来更多的用户,因为增强的用户体验。说了这么多,那么我们应该如何对我们前端的页面进行性能优化呢? 一般说来,web前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有浏览器访问、使用反向代理才、CDN等。 浏览器访问优化 浏览器请求处理流程如下图: 1、减少http请求,合理设置

蓝桥算法训练 数据交换 JAVA

…衆ロ難τιáo~ 提交于 2020-02-26 07:36:10
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值。   输入格式:输入只有一行,包括两个整数。   输出格式:输出只有一行,也是两个整数,即交换以后的结果。   要求:主函数负责数据的输入与输出,但不能直接交换这两个变量的值,必须通过调用单独定义的函数swap来完成,而swap函数只负责交换变量的值,不能输出交换后的结果。 输入输出样例 样例输入 4 7 样例输出 7 4 思路:肯定是冒泡排序完交换数据,输出即可。 第一个简单易懂,第二个,嗯…花里胡哨??哈哈哈哈 import java . util . Scanner ; public class Main { static int x , y ; //定义全局 变量 public static void main ( String [ ] args ) { Scanner scanner = new Scanner ( System . in ) ; x = scanner . nextInt ( ) ; y = scanner . nextInt ( ) ; swap ( ) ; //调用方法 System . out . println ( x + " " + y ) ; } public