一、JavaScript 函数

1、普通函数-有函数名

function func(){
}

 

2、匿名函数-无函数名

setInterval(function(){
console.log(123);
},5000)

  

3、自执行函数

多数情况下可能会引入别人的js,如果别人的js函数重复,会导致一个不能用,为了避免这个问题,把内部所有的功能放到函数里面。做成一个嵌套函数。

但是如果外面的函数名也有重复,怎么处理,就外边的函数没有名字,并且自动执行一下。

自执行函数怎么写呢?

//  ()():第一个括号function,第二个括号传实参。创建函数,并且自动执行
(function(arg){
console.log(arg);
})(1)

  

二、JavaScript 序列化及转义

  • 常用的序列化操作

li = [11,22,33,44]
s = JSON.stringify(li) // 把对象转化为字符串
newL = JSON.parse(s) // 把字符串转化为对象
  • 转义

比如网上搜一个东西,网址自动变成了%等一些内容

>  url = "https://www.sogou.com/web?query=时间"
< "https://www.sogou.com/web?query=时间"
> newUrl = encodeURI(url) // 转义
< "https://www.sogou.com/web?query=%E6%97%B6%E9%97%B4"
> decodeURI(newUrl) // 转回原格式
< "https://www.sogou.com/web?query=时间"
> newUrl = encodeURIComponent(url) // 全部转义
< "https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E6%97%B6%E9%97%B4"

  

默认http请求不是长链接,连一次就断了,但是网站有保持登录一个月,怎么实现的。

一般登录成功后,网站会给你发一段字符串过来,把它保存在硬盘的某个地方。这就是cookie。

客户端(cookie) => 服务器端 。 将数据经过转义后,保存在cookie

escape( )          // 对字符串转义
unescape( ) // 给转义字符串解码
URIError // 由URl的编码和解码方法抛出

  

三、eval 以及时间操作

  • eval

在python中:

val = eval(" 1+1 ")    # 表达式
exec(" 1+2 ") # 比如for循环。但exec只是执行,没有返回值,返回值为None

  

在JavaScript中:

eval :功能是python里eval和exec的合集

  • 时间操作
>  d = new Date()
Mon Nov 28 2016 22:46:33 GMT+0800 (中国标准时间)
> d.getMinutes()
46
> n = d.getMinutes() + 12
58
> d.setMinutes(n)
1480345113329
> d
Mon Nov 28 2016 22:58:33 GMT+0800 (中国标准时间) // Date类
// var d = new Date() 当前时间
// d.getXXX 获取
// d.setXXX 设置

  

四、JavaScript 作用域

1、JavaScript 以函数作为作用域 (let除外)

  • java、c、c# 等语言是以“{}”代码块 作为作用域的。
  • Python中:作用域是以函数作为作用域的。
  • JavaScript:也是以函数作为作用域的

2、函数的作用域在函数未被调用之前,已经创建

3、函数的作用域存在作用域链,并且也是在被调用之前创建

作用域链:嵌套函数,作用域一层套一层

以下三个示例,分别会输出什么?

        // 示例一:
xo = "alex";
function func(){
// var xo = 'eric';
function inner(){
// var xo = 'tony';
console.log(xo);
}
inner()
}
func() // 返回结果为'alex' // 示例二:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
return inner;
}
var ret = func()
ret() // 返回结果为'eric' // 示例三:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
var xo = 'tony';
return inner;
}
var ret = func()
ret() // 返回的是'tony'
// 注:浏览器console中换行,使用shift+回车

  

  函数的作用域存在作用域链,并且也是在被调用之前创建.

4、函数内局部变量 声明提前

        // 示例一:
function func(){
console.log(xxoo);
}
func();
// 程序直接报错 function func(){
console.log(xxoo);
var xxoo = 'alex';
}
// 解释过程中:var xxoo;
func();
// undefined

  未赋值变量,提前声明为 undefined.

>  var fgf
undefined
> fgf
undefined

  

五、JavaScript面向对象

  • this代指对象(python self)
  • 创建对象时, new 函数名()
function Foo(n){
this.name = n;
this.sayName = function(){
console.log(this.name);
}
} var obj1 = new Foo('we');
obj1.name
obj1.sayName() var obj2 = new Foo('wee');
obj2.name
obj2.sayName()

  

上面那么写可以,但是有个问题,里面有些内容被重复定义了,sayName这个方法在每个对象里都被重复定义了一次。

  • Python的面向对象:方法保存在类内存中
class Foo:
def __init__(self,name):
self.name = name def sayName(self):
print(self.name) obj1 = Foo('we')
obj2 = Foo('wee')

  

  • JavaScript面向对象 —> 原型:

原型:避免浪费内存资源

function Foo(n){
this.name = n;
}
// Foo的原型
Foo.prototype = {
'sayName': function(){
console.log(this.name)
}
} obj1 = new Foo('we');
obj1.sayName() obj2 = new Foo('wee');

  

六、JavaScript 词法分析解析

如下代码,分别会对应输出什么?

function t1(age){
console.log(age); // function age()
var age = 27;
console.log(age); // 27
function age(){} // 执行时,因为没有调用,所以执行时不考虑
console.log(age); // 27
} t1(3);

  

active object ——> 简称AO 
1. 形式参数 
2. 局部变量 
3. 函数声明表达式(优先级比较高)

下面开始分析:

  • 形式参数: 
    AO.age = 3;
  • 局部变量: 
    AO.age = 27;
  • 函数声明表达式 
    AO.age = function()

作用域值的分析,也可以通过词法分析,去分析。具体的词性分析内容见另一篇博文:

http://www.cnblogs.com/zoe233/p/7507828.html

HTML JavaScript 基础(下)的更多相关文章

  1. 02.JavaScript基础下

    运算符 算术:+ 加.- 减.* 乘./ 除.% 取模 实例:隔行变色.秒转时间 赋值:=.+=.-=.*=./=.%= 关系:<.>.<=.>=.==.===.!=(不等). ...

  2. Web前端-JavaScript基础教程下

    Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...

  3. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...

  4. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  5. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  6. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  7. Javascript基础回顾 之(三) 面向对象

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  8. Javascript基础回顾 之(二) 作用域

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  9. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  10. javascript基础01

    javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...

随机推荐

  1. JavaScript RegExp.​$1...$9 属性详解

    RegExp.$1...$9属性用于返回正则表达式模式中某个子表达式匹配的文本. 正则表达式中每个小括号内的部分表达式就是一个子表达式. 该属性是RegExp全局对象的一个只读属性,所有主流浏览器均支 ...

  2. 搭建 sqli SQL注入练习靶场

    文章更新于:2020-02-18 按照惯例,需要的文件附上链接放在文首 文件名:sqli-labs-master.zip 文件大小:3.5 M 下载链接:https://www.lanzous.com ...

  3. django-filter的基本使用

    django-filter 查询 创建model和视图 from django.db import models # Create your models here. class Student(mo ...

  4. 路由与交换,cisco路由器配置,基础知识点(一)

    基础知识点 1.路由器与交换机端口初始化区别 路由器的所有接口默认都是关闭的 交换机的所有接口默认都是打开的 2.路由器 fastEthernet 端口 fastEthernet 0/0 第一个0代表 ...

  5. Linux ssh登录出错

    今天登录远程主机的时候,出现了以下错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOT ...

  6. 萌新带你开车上p站(Ⅳ)

    本文作者:萌新 前情回顾: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 萌新带你开车上P站(三) 回顾一下前篇,我们开始新的内容吧 0x12 登录后看源码 通读程序,逻辑是这样子的: 输入6个 ...

  7. Node.js 的事件循环机制

    目录 微任务 事件循环机制 setImmediate.setTimeout/setInterval 和 process.nextTick 执行时机对比 实例分析 参考 1.微任务 在谈论Node的事件 ...

  8. HttpClient之Get请求和Post请求示例

    HttpClient之Get请求和Post请求示例 博客分类: Java综合   HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, ...

  9. TcxGrid

    一.列的宽度为64时,其宽度会自动根据字段的长度调整,设置其他值即为固定值: 二.cell中显示按钮:选中某列,在properties中更改为ButtonEdit,点击子属性buttons添加butt ...

  10. B - Fadi and LCM CodeForces - 1285C 质因子

    题目大意很简单,给你一个整数X,让你求a和b,使得max(a,b)尽可能的小,然后打印a,b 题解:想到了质因子分解,也考虑到了暴力,但是觉得暴力的话会TLE,所以打算用贪心做,然后就一直Wa.... ...