一、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(" 执行代码 ") # 比如for循环。但exec只是执行,没有返回值

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() // 示例二:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
return inner;
}
var ret = func()
ret() // 示例三:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
var xo = 'tony';
return inner;
}
var ret = func()
ret()
// 注:浏览器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()

作用域值的分析,也可以通过词法分析,去分析

前端逼死强迫症系列之javascript续集的更多相关文章

  1. 前端逼死强迫症系列之javascript

    JavaScript 和Python.C#.Java.Ruby一样,都是一门独立的编程语言. 像python.C.Java等都需要解释器,学习它们的语法.而浏览器本身就是javascript的解释器. ...

  2. 前端逼死强迫症系列之Html

    概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...

  3. 前端逼死强迫症系列之css

    一.编写css样式 1.ID选择器 由于ID唯一,所以也是写多遍. <head> <style> #i1{ background-color: #2459a2; height: ...

  4. 前端逼死强迫症之css续集

    上节内容回顾 如果点击图片调转到连接,a标签下套img标签,在IE有的版本中,会有蓝色边框. 因为a标签默认字体颜色就是蓝色,img标签继承了父级标签,而IE浏览器默认给边框加了宽度.解决: < ...

  5. 前端逼死强迫症之DOM

    Dom:document.相当于把所有的html文件,转换成了文档对象. 之前说过:html-裸体的人:css-穿上衣服:js-让人动起来. 让人动起来,就得先找到他,再修改它内容或属性. 找到标签 ...

  6. 【PC网站前端架构探讨系列】关于中小型PC网站前端架构方案的讨论与实践

    目   录 1.遇到的问题 2.目标 3.探讨 4.架构设想 5.流程 6.初步实现 7.存在问题 8.最后 遇到的问题 我在这个系列上篇文章 已经讲解并开始逐步应用模块化思想,不知大家还记不记得,题 ...

  7. 前端回顾:2016年 JavaScript 之星

    JavasScript社区在创新的道路上开足了马力,曾经流行过的也许一个月之后就过时了.2016已经结束了.你可能会想你是否错过一些重要的东西?不用担心,让我们来回顾2016年前端有哪些主流.通过比较 ...

  8. 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

    15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...

  9. 王下邀月熊_Chevalier的前端每周清单系列文章索引

    感谢 王下邀月熊_Chevalier 分享的前端每周清单,为方便大家阅读,特整理一份索引. 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清单系列,并以年/月为单位进行分类,具 ...

随机推荐

  1. Spring Cloud 基于Consul 实现配置服务

    Spring Cloud体系中提供了Config组件来进行配置服务管理.而Consul除了提供服务注册与发现功能外,同时也提供配置管理功能.本位将介绍如何结合Spring Cloud + Consul ...

  2. 在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )

    原文:在论坛中出现的比较难的sql问题:33(递归 连续日期问题 ) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...

  3. Java反射机制、注解及JPA实现

    1.java反射概述 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称 ...

  4. 【leetcode】544. Output Contest Matches

    原题 During the NBA playoffs, we always arrange the rather strong team to play with the rather weak te ...

  5. Android笔记(八) Android中的布局——相对布局

    RelativeLayout又称为相对布局,也是一种常用的布局形式.和LinearLayout的排列规则不同,RelativeLayout显得更加随意一下,它通常通过相对定位 的方式让控件出现在布局的 ...

  6. c# 使用序列化

  7. java.lang.Override注解

    @Override注解的作用 当你想重写父类的某个方法时,它可以帮你检查方法的正确性. 举例说明 比如说我们重写父类的toString()方法,但我们现在将toString这个方法名拼错了,这是它会在 ...

  8. rabbitmq二进制安装

    一.erland的安装 1.首先测试一下是否已经安装了erlang,命令 rpm -qa | grep erlang 2.没有安装则用yum安装 yum install erlang -y 二.下载r ...

  9. java基础(2)---基本语法

    一.程序注释 二.HelloWorld 三.关键字 四.常量 五.变量 六.标识符: 七.数据类型 数据类型间的转换: (1)自主转换:不需要明确指出所要转化的类型是什么,而是由java虚拟机自动转化 ...

  10. 为什么要设置HTTP timeout?

    先看一个不设置timeout造成的线上事故. 一次线上事故 有一次生产上的一个服务出了点故障,一个原本每5分钟执行一次的定时任务突然不执行了.第一反应是任务执行报错,查看日志,却没有找到任何异常报错信 ...