[x] 字节
- 京东
// Add a button to Collapse or Expand files in a Github Gist | |
// | |
// Install Tampermonkey and add this as a script | |
// ==UserScript== | |
// @name Github Gists: Expand / Collapse Files | |
// @namespace https://gist.github.com/Jaace/7b70d2bb19af63e10b144ed7d867eae0 | |
// @version 0.1 | |
// @description Add a button to expand or collapse files in github gists | |
// @author Jason Boyle |
--- Emacs Hammerspoon Script | |
-- Author: Justin Tanner | |
-- Email: work@jwtanner.com | |
-- License: MIT | |
--- What does this thing do? | |
-- Allows you to have Emacs *like* keybindings in apps other than Emacs. | |
-- You can use Ctrl-Space to mark and cut text just like Emacs. Also enables Emacs prefix keys such as Ctrl-xs (save). | |
--- Installation |
Linux - create "Default (Linux).sublime-mousemap" in ~/.config/sublime-text-3/Packages/User | |
Mac - create "Default (OSX).sublime-mousemap" in ~/Library/Application Support/Sublime Text 3/Packages/User | |
Win - create "Default (Windows).sublime-mousemap" in %appdata%\Sublime Text 3\Packages\User | |
[ | |
{ | |
"button": "button1", | |
"count": 1, | |
"modifiers": ["ctrl"], | |
"press_command": "drag_select", |
import { combineReducers, createStore } from 'redux'; | |
function discussionsList(state = {}, { type, payload} = {}) { | |
if (type === 'ADD') { | |
return { | |
...state, | |
[payload.id]: { | |
id: payload.id, | |
author: payload.author.id, | |
content: payload.content, |
import {Action, ActionCreator, Dispatch} from 'redux'; | |
import {ThunkAction} from 'redux-thunk'; | |
// Redux action | |
const reduxAction: ActionCreator<Action> = (text: string) => { | |
return { | |
type: SET_TEXT, | |
text | |
}; | |
}; |
[ | |
{ "keys": ["ctrl+w"], "command": "delete_word", "args": { "forward": false, "sub_words": true } }, | |
{ "keys": ["ctrl+u"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} } | |
] |
[x] 字节
每个函数创建的时候, 就会创建一个词法作用域, 当在运行的时候, 创建一个新的词法环境(*注意, 这个词法环境还是要从函数定义的时候开始找, 不过在这个时候函数被定义的词法环境也是有可能改变的*
), 这两个作用与很有可能是不同的. 所以分析的时候一定是要看最新的作用域
词法环境包括自己内部的环境, 和引用的外部的环境. 当存在嵌套函数的时候, 外部环境可能还引用更加外部的环境, 就形成了一条作用域链. 最最里层的函数在执行的时候, 会根据这条链子, 由内而外寻找需要的变量. 然后可以对找到的变量进行修改, 修改是在该变量所在的作用域内修改, 也就是说对于闭包来讲, 修改的地方在该函数的外部环境修改, 而非克隆一份放低自己的内部环境内修改
普通(纯)函数是没有状态的, 闭包可以使得函数有状态, 有状态就意味着有记忆, 毕竟状态可以发生改变. 当然, 这里的状态, 不在函数内部, 而是在函数外部, 不过函数可以读取到
有了闭包就可以模拟类的一些效果, 闭包和类都是保存状态用的
每次调用一个函数, 如果这个函数存在闭包, 那么都会创建一个单独的闭包环境, 里面有该闭包的状态. 多次调用这个函数, 会创建多个闭包, 这些闭包内部的环境状态都是独立的. 类似于有一个类, 你可以进行多次实例化, 每次实例化出来的都是不同的对象
export const name = 'react-redux' |
import { createStore, applyMiddleware } from 'redux' | |
import thunk from 'redux-thunk' | |
import axios from 'axios' | |
// 建立一个 local state 负责 loading | |
const state = { | |
loading: false | |
} | |
// 这个 action 用于在下面的 fetchUser 里面 dispatch |