函数声明

JavaScript 预解析机制

别来无恙 提交于 2020-03-01 16:46:42
首先我们来看一段代码: 1 <script> 2 console.log(a); 3 var a = 10; 4 </script> 此时运行结果为 为什么会显示undefined呢?这就涉及到了 预解析中的变量提升 : 1、 局部提升(变量) 会把变量声明分成两部分 1) 变量声明 只有这个部分发生了提升 ,提升至所在作用域的最前面 2) 变量赋值 在原位置; 接下来再看一段代码: 1 <script> 2 foo(); 3 function foo(){ 4 console.log("hello world"); 5 } 6 </script> 此时运行结果为: 我们会发现,声明式的函数,调用在声明之前也是可以访问的。这是因为 预解析总的函数提升 : 2 、整体提升(函数) 整个函数都提升到作用域的最前面 了解了变量提升和函数提升,那么我们来想一下两者谁的优先级更高? 1 <script> 2 console.log(foo); 3 var foo = 10; 4 function foo(){} 5 </script> 显示结果为: 结果得到函数而不是变量; 也就是说:函数将变量声明覆盖,说明是先变量提升之后,函数再提升上去将其覆盖。所以, 变量提升的优先级高。 总结 : JavaScript 预解析机制 有如下操作: 检查 你的所有代码有没有 语法错误 。如果有语法错误

【宠粉通道】叫我讲解的一道前端JS面试题-灵魂三问:prototype?类的prototype是什么?对象的proto是什么

余生颓废 提交于 2020-03-01 14:10:10
作者 | Jeskson 来源 | 达达前端小酒馆 1 究竟是什么样的题目让我徒弟疑惑呢?让我们看看截图先,来源于wx群: 看看我是怎么回答的: function Foo() { getName = function () { alert (1); }; return this; } var getName; //只提升变量声明 function getName() { alert (5);} //提升函数声明,覆盖var的声明 Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; getName = function () { alert (4);}; //最终的赋值再次覆盖function getName声明 getName(); //最终输出4 看懂没呢?没看懂也别急哈: 先让我们了解函数的定义: 函数声明,可以先调用再声明 dadaFn(); function dadaFn(){ console.log(dadaFn); } / 返回 f -> function function dadaFn() { console.log(dadaFn); } 函数表达式,先声明再调用: let daDafn = function() { console

PHP 面向对象(OOP) 笔记

戏子无情 提交于 2020-03-01 12:55:35
1:PHP中类初步接触 复制代码 class Mypc //类名 { public $name; //声明属性,对象名称 function game() //类的方法、动作 { return "玩游戏"; } } [color=#000000]$pc1=new Mypc(); // 创建PC1对象实例[/color] $pc1->name="IBM电脑"; // 给PC1对象赋值,声明对象名称 echo $pc1->name; //输出对象名称 echo $pc1->game(); //输出对象执行的动作方法 2:this 关键子的应该(访问当前对象中的对象属性和对象方法的系统变量) 复制代码 class Mypc { public $name; function game() { return $this->name."玩游戏"; //这里,注意看清楚 } } $pc1=new Mypc(); $pc1->name="IBM电脑"; echo $pc1->game(); 输出结构为:IBM电脑玩游戏 3:__construct 初始化函数 在 PHP 4中初始化可以这么写 function Mypc(){}..和类名一定要相同 复制代码 class Mypc { public $name; function __construct($name) //初始化函数

delete分析 引用于 http://www.cnblogs.com/yuzhongwusan/archive/2012/06/14/2549879.html

点点圈 提交于 2020-02-28 23:47:18
最近重新温习JS,对delete操作符一直处于一知半解的状态,偶然发现一篇文章,对此作了非常细致深入的解释,看完有茅塞顿开的感觉,不敢独享,大致翻译如下。 原文地址: http://perfectionkills.com/understanding-delete/ P.S. 作者是PrototypeJS的开发组成员之一 ========分割线======== 在开始之前,先让我们看一段代码 Js代码 >>> var sum = function(a, b) {return a + b;} >>> var add = sum; >>> delete sum true >>> typeof sum; "undefined" 这段代码是Firebug控制台里的实际结果,初看这段代码,你觉得有什么问题?但我要说的是,删除sum应该是失败的,同时typeof sum的结果不应该是undefined,因为在Javascript里以这种方式声明的变量是无法被删除的。 那么问题出在哪里?为了回答这个问题,我们需要理解delete操作符在各种情况下的实现细节,然后再回过头来看Firebug的这个看似“诡异”的输出。 P.S 没有特殊声明的情况下,下文中所提到的Javascript都指的是ECMAScript规范。 1. 理论 delete操作符通常用来删除对象的属性: Js代码 var o = {

Java学习笔记(十三)面向对象---异常

一曲冷凌霜 提交于 2020-02-28 22:50:10
概述 对异常的理解 程序在运行过程中出现不正常情况。是对问题的描述,将问题进行对象的封装。 异常的由来 问题也是现实生活中一个具体的事物,也可以通过Java的类的形式进行描述,并封装成对象。 对于问题的划分 一种是严重的问题,一种是非严重的问题。 对于严重的:Java通过Error类进行描述。 对于Error一般不编写针对性的代码对其进行处理。 对于非严重的:Java通过Exception类进行描述。 对于Exception可以使用针对性的处理方式进行处理。 无论Error还是Exception都具有一些共性内容。 比如:不正常情况的信息,引发原因。 异常体系 Throwable |--Error |--Exception |--RuntimeException 异常体系的特点: 异常体系中的所有类以及被建立的对象都具备可抛性。 异常的处理 代码语句格式 try { 需要被检测的代码 } catch(异常类 变量) { 处理异常的代码(处理方式) } finally { 一定会执行的语句; } 对异常的常见操作方法 String getMessage(); String toString(); void printStackTrace(); class Demo { int div(int x,int y) { return x/y; } } public class

JDK8的十大新特性介绍

随声附和 提交于 2020-02-26 19:15:47
JDK8十大新特性 1.Lambda表达式 2.新的日期API 3.引入Optional 4.使用Base64 5.接口的默认方法和静态方法 6.新增方法引用格式 7.新增Stream类 8.注解相关的改变 9.支持并行(parallel)数组 10.对并发类(Concurrency)的扩展。 一、Lambda表达式 Lambda 表达式也可称为闭包,是推动 Java 8 发布的最重要新特性。lambda表达式本质上是一个匿名方法。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)或者把代码看成数据。使用 Lambda 表达式可以使代码变的更加简洁紧凑。在最简单的形式中,一个lambda可以由:用逗号分隔的参数列表、–>符号、函数体三部分表示,在某些情况下lambda的函数体会更加复杂,这时可以把函数体放到在一对花括号中,就像在Java中定义普通函数一样。Lambda可以引用类的成员变量与局部变量(如果这些变量不是final的话,它们会被隐含的转为final,这样效率更高)。Lambda可能会返回一个值。返回值的类型也是由编译器推测出来的。如果lambda的函数体只有一行的话,那么没有必要显式使用return语句。 如何使现有的函数友好地支持lambda。最终采取的方法是:增加函数式接口的概念。函数式接口就是接口里面必须有且只有一个抽象方法的普通接口

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,

Qt之信号signals和槽slots详解

佐手、 提交于 2020-02-26 14:46:15
学习到自定义信号和槽的时候经常编译不过去,前边一篇解决了Q_OBJECT编译的问题,这里详细说明了slots和signals。 1、signals前面不可加public、private和protected进行修饰;slots前面可以加,因为Qt说槽函数可以当普通函数使用。 2、signals区域的函数必须是void类型,而且这些信号函数没有函数体,也就是说不可以自己定义这些信号函数,你只要声明它就够了,其它不用管,Qt内部自己弄。 3、宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数。 一、概述 二、信号 三、槽 四、信号和槽的关联 五、元对象工具 六、程式样例 七、应注意的问题 相关资源 作者简介 作者:唐新华 (xhsmart@263.net) 软件工程师 信号和槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号和槽的一些基本概念、元对象工具及在实际使用过程中应注意的一些问题。 QT 是个跨平台的C++ GUI应用构架,他提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的KDE桌面环境就是建立在QT库的基础之上。QT支持下列平台:MS/WINDOWS-95、98、NT和2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX

存储持续性、作用域和链接性

北城以北 提交于 2020-02-26 00:00:01
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h声明全局变量: extern inta; 2、在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义: (1)声明必须使用extern关键字;(2)不能给变量赋初值 extern int a; //声明 int a; //定义 int a = 0; //定义 extern int a =0; //定义 头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。 头文件请不要定义任何变量,那是非常业余的行为…… 一般在头文件中申明,用extern,在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。 头文件只能申明全局变量(extern),不可定义(不推荐使用) .cpp里,在最外层定义即可(int gi),直接引用 如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效

extern,头文件和ifndif宏

拟墨画扇 提交于 2020-02-25 23:46:35
转自:CSDN-》 fpmystar 用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数f(),我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了f()的声明)不就可以了么,为什么还要用extern呢? 这个问题一直也是似是而非的困扰着我许多年了,今天上网狠狠查了一下总算小有所获了: PS: extern可以置于变量或者 函数 前,用于高速编译器变量或者 函数 的定义在别的文件中,提示编译器遇到此变量和 函数 时在其他模块中寻找其定义。 头文件 首先说下头文件,其实 头文件对CPU而言没什么作用,她只是在预编译时在#include的地方展开一下,没别的意义了,其实头文件主要是给别人看的。 我做过一个实验,将头文件的后缀改成xxx.txt,然后在引用该头文件的地方用 #include"xxx.txt" 编译,链接都很顺利的过去了,由此可知,头文件仅仅为阅读代码作用,没其他的作用了! 不管是C还是C++,你把你的函数,变量或者结构体,类啥的放在你的.c或者.cpp文件里。然后编译成lib,dll,obj,.o等等,然后别人用的时候 最基本的gcc hisfile.cpp yourfile.o|obj|dll|lib 等等。 但对于我们程序员而言,他们怎么知道你的lib,dll..