课程笔记:——javascript中的预解释2

in:检测某一个属性是否属于这个对象(既可以检测私有的属性,也可以检测公有的属性) --> attr in obj

1、不管条件是否成立,在预解释的时候,判断体中的带var和function的都要进行预解释
window下的预解释: var a; -->a=undefined 我们在全局作用域下声明的变量不仅仅是全局变量,也相当于给window增加了一个叫做"a"的属性名
if (!("a" in window)) {//"a" in window ->true 取反后条件不成立,那么里面的给a赋值的代码也不会在执行
var a = "珠峰";
}
console.log(a);//-->undefined

2、预解释只发生在"="的左边,右边的是值,是不进行预解释的
fn();//-->由于预解释的时候就已经完成了函数的声明+定义,所以在页面中的任何位置都可以执行fn这个函数
function fn() {
console.log("ok");
}

//预解释:var fn;
console.log(fn);//-->undefined
//fn(); -->Uncaught TypeError: fn is not a function fn不是一个函数
var fn = function () {
console.log("no");
};
console.log(fn);//-->匿名函数本身

对于匿名函数中的函数表达式来说,我们只有在赋值的下面才能执行对应的函数 ,所以在真实的项目中,我们一般都是用函数表达式来定义函数

3、自执行函数在预解释的时候是不进行的
function是不进行预解释的,当代码执行到这的时候,我们定义和执行一起完成即可
;(function (num) {
//自执行函数执行也会形成一个私有的作用域:形参赋值;预解释;代码执行;形成的私有作用域销毁;
})(100);

匿名函数:
1)函数表达式-->把函数定义的部分产生的内存地址当做值赋值给我们的一个变量(某一个元素的事件)
var fn = function () {};
oDiv.onclick=function(){};
//给一个元素的某一个事件类型绑定一个方法:
//当代码执行到上面行的时候,首先开一个空间(地址:xxxfff000),把匿名函数中的代码当做字符串存进去,然后把地址赋值给我们的onclick -->oDiv.onclick=xxxfff000;
//当我们触发点击事件的时候,首先通过xxxfff000找到对应的函数,并且让函数执行

2)自执行函数-->定义和执行的两部分一起完成了
function(num){}(100); 定义完成立即执行,并且给形参num赋值为100 -->这样写是不符合语法的,如何的处理呢?
前面加;的作用就是防止上面的代码结束不加;
;(function (num) {

})(100);
~function(num){}(100);
!function(num){}(100);
+function(num){}(100);
-function(num){}(100);

4、预解释的时候,如果遇到名字重复了,不会重新的声明,但是会重新的进行定义
变量的名字和函数的名字相同也算作冲突
var fn = 12;//-->window.fn=12;
function fn() {

}//-->window.fn=xxxfff000

fn(); -->2
function fn(){console.log(1);}
fn(); -->2
var fn=13;
fn(); -->报错:fn is not a function
function fn(){console.log(2);}
fn();

5、在私有作用域中的预解释
1)函数体中return下面的代码是不在执行的了,但是如果当中存在var 或者 function是要进行预解释的
2)函数体中return后面的代码,是我们要返回的值,它是一个值,所以不参加预解释
function fn() {
console.log(num);
return function () {//当执行到return的时候,我们开一个新的堆内存,并且把function这个函数对应堆内存的地址返回
};
//下面的两行代码不执行,但是预解释的时候,需要声明一个私有变量num,在函数体中出现的num变量都是私有的变量
var num = 13;
console.log(num);
}
fn();

综述:自从学了预解释,从此节操是路人

时间: 2024-10-05 12:24:10

课程笔记:——javascript中的预解释2的相关文章

课程笔记:——Javascript 中的预解释

1.预解释(变量提升):在当前作用域下,JS代码执行之前,浏览器首先会把所有带var和function关键字的进行提前的声明或者定义var num = 12;声明(declare): var num; -->声明的时候没有赋值,我们的默认值是undefined定义(defined): num=12; 2.带var和带function的预解释不一样:var:在预解释的时候,只声明未定义(只有代码执行的时候才会完成赋值定义)function:在预解释的时候,声明和定义一起完成了(当代码在执行到定义的

JavaScript那些事儿-预解释

带var关键字预解释 让我们先看下这段代码执行的结果: alert(n);//弹出undefined var n = 10; 弹出的结果是undefined,为何不是10?让我们再看下面这段代码执行的结果: alert(n); n = 10; 运行报如下错误:,为何这次会报错,原因是代码在运行的时候,没有声明这个变量n:通过这两段代码的比较,我们发现带var关键字和不带var关键字声明的变量是有区别的,带var声明的变量在代码执行之前,似乎浏览器已经给了它们一个初始值undefined,因此我们

JS中的预解释

1.什么是预解释? 在当前作用域下,JS代码执行之前,首先会把带var/function关键字的进行提前的声明(declare)或者定义(defined). 2.预解释是如何操作的? a.带var关键字的在预解释阶段只完成了提前的声明:b.带function关键字的在预解释阶段完成了声明和定义两个操作. 3.预解释的注意点? a.不管条件判断是否成立,判断体中的内容都要进行预解释: 例如:if (!('a' in window)) { var a=12;  //判断'a'是否为window的一个

JavaEE笔记——JavaScript中对dom的操作

节点及其类型 在JavaScript中,节点分为三种: 元素节点:HTML标签元素. 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 文本节点: 是元素节点的子节点, 其内容为文本. 在 html 文档的什么位置编写 js 代码? 一般地, 在 body 节点之前编写 js 代码, 但需要利用 window.onload 事件, 该事件在当前文档完全加载之后被触发, 所以其中的代码可以获取到当前文档的任何节点 <head> <meta http-equiv="Cont

读书笔记-JavaScript中的全局对象

对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用.这个JavaScript自身提供的全局对象的功能包括: 1.全局对象拥有一些常用的属性值.比如undefined.Infinity以及NaN.2.全局对象拥有一些常用的属性对象.比如Math.JSON和Number对象均为该全局对象的属性.3.全局对象提供一些全局函数供调用.比如isNaN().isFinite().parseInt()和eval()等.4.全局对象提供一些全局构造器

JavaScript预解释是一种毫无节操的机制

前言 JavaScript是一门解释型的语言 , 想要运行JavaScript代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解释(预处理)阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码 执行阶段: 在编译阶段JavaScript解释器借助执行环境把字节码生成机械码,并从上到下按顺序执行 本文就重点介绍预解释,框架图如下: 一.什么是预解释 预解释:JavaScript代码执行之前,浏览器首先会默认的把所有带var和funct

吃透【预解释】,从此再也不用担心!

Author:李金涛 Form:光环国际 Time:2017-12-31 23:49(跨年夜的最后一刻,我在辛勤耕耘我的"预解释",收获满满,甚喜!) 定义:预解释(变量提升):js在运行前,先把所有带var和function关键字的提前声明或定义.且预解释是发生当前作用域下的. 1,全局预解释阶段: (1)全局作用域与全局变量:当浏览器加载HTML页面的时候,首先会提供一个供全局JavaScript代码执行的环境,称之为全局作用域(global/ window).在window全局作

预解释-基础

预解释(变量提升):在当前的作用域中,JS代码从上到下执行之前,浏览器会默认的先把所有带var/function关键字的进行提前的声明或者定义对带var变量的是提前声明(declare)对带function关键字的是提前定义(声明+定义)(defined) ->在预解释阶段,带var关键字的只是提前的声明,只有在JS从上到下执行的过程中才会进行定义赋值: 1 //->预解释阶段:告诉浏览器在当前的作用域中(window)有一个名字叫做num的变量:var num; 2 console.log(

跟我学《JavaScript高程3》第三讲,课程笔记

跟我学<JavaScript高程3> 第三讲:第4章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作    课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 课程回顾 1.数据类型:5种基本类型,1中复杂类型. 2.操作符:需要注意运算优先级,算关逻条赋逗. 3.语句:if-else.for.for-in.while 4.函数:函数定义,目前的两种方法 补充:变量在